Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 76176)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 76177)
@@ -851,19 +851,19 @@
 	src/runtime/information/UIVMInformationDialog.h \
 	src/guestctrl/UIGuestControlConsole.h \
-	src/guestctrl/UIGuestControlFileManager.h \
-	src/guestctrl/UIGuestControlFileManagerDialog.h \
-	src/guestctrl/UIGuestControlFileManagerLogPanel.h \
-	src/guestctrl/UIGuestControlFileManagerOperationsPanel.h \
-	src/guestctrl/UIGuestControlFileManagerOptionsPanel.h \
-	src/guestctrl/UIGuestControlFileManagerPanel.h \
-	src/guestctrl/UIGuestControlFileManagerSessionPanel.h \
-	src/guestctrl/UIGuestControlFileModel.h \
-	src/guestctrl/UIGuestControlFileTable.h \
+	src/guestctrl/UIFileManager.h \
+	src/guestctrl/UIFileManagerDialog.h \
+	src/guestctrl/UIFileManagerLogPanel.h \
+	src/guestctrl/UIFileManagerOperationsPanel.h \
+	src/guestctrl/UIFileManagerOptionsPanel.h \
+	src/guestctrl/UIFileManagerPanel.h \
+	src/guestctrl/UIFileManagerSessionPanel.h \
+	src/guestctrl/UIFileManagerModel.h \
+	src/guestctrl/UIFileManagerTable.h \
 	src/guestctrl/UIGuestControlInterface.h \
 	src/guestctrl/UIGuestControlTreeItem.h \
-	src/guestctrl/UIGuestFileTable.h \
+	src/guestctrl/UIFileManagerGuestTable.h \
 	src/guestctrl/UIGuestProcessControlDialog.h \
 	src/guestctrl/UIGuestProcessControlWidget.h \
-	src/guestctrl/UIHostFileTable.h \
+	src/guestctrl/UIFileManagerHostTable.h \
 	src/runtime/normal/UIKeyboardHandlerNormal.h \
 	src/runtime/normal/UIMachineLogicNormal.h \
@@ -1007,19 +1007,19 @@
 	src/runtime/information/UIVMInformationDialog.h \
 	src/guestctrl/UIGuestControlConsole.h \
-	src/guestctrl/UIGuestControlFileManager.h \
-	src/guestctrl/UIGuestControlFileManagerDialog.h \
-	src/guestctrl/UIGuestControlFileManagerLogPanel.h \
-	src/guestctrl/UIGuestControlFileManagerOperationsPanel.h \
-	src/guestctrl/UIGuestControlFileManagerOptionsPanel.h \
-	src/guestctrl/UIGuestControlFileManagerPanel.h \
-	src/guestctrl/UIGuestControlFileManagerSessionPanel.h \
-	src/guestctrl/UIGuestControlFileModel.h \
-	src/guestctrl/UIGuestControlFileTable.h \
+	src/guestctrl/UIFileManager.h \
+	src/guestctrl/UIFileManagerDialog.h \
+	src/guestctrl/UIFileManagerLogPanel.h \
+	src/guestctrl/UIFileManagerOperationsPanel.h \
+	src/guestctrl/UIFileManagerOptionsPanel.h \
+	src/guestctrl/UIFileManagerPanel.h \
+	src/guestctrl/UIFileManagerSessionPanel.h \
+	src/guestctrl/UIFileManagerModel.h \
+	src/guestctrl/UIFileManagerTable.h \
 	src/guestctrl/UIGuestControlInterface.h \
 	src/guestctrl/UIGuestControlTreeItem.h \
-	src/guestctrl/UIGuestFileTable.h \
+	src/guestctrl/UIFileManagerGuestTable.h \
 	src/guestctrl/UIGuestProcessControlDialog.h \
 	src/guestctrl/UIGuestProcessControlWidget.h \
-	src/guestctrl/UIHostFileTable.h \
+	src/guestctrl/UIFileManagerHostTable.h \
 	src/runtime/normal/UIKeyboardHandlerNormal.h \
 	src/runtime/normal/UIMachineLogicNormal.h \
@@ -1238,11 +1238,11 @@
 	src/runtime/UIFrameBuffer.cpp \
 	src/runtime/UIIndicatorsPool.cpp \
-	src/guestctrl/UIGuestControlFileManager.cpp \
-	src/guestctrl/UIGuestControlFileManagerLogPanel.cpp \
-	src/guestctrl/UIGuestControlFileManagerOperationsPanel.cpp \
-	src/guestctrl/UIGuestControlFileTable.cpp \
-	src/guestctrl/UIGuestFileTable.cpp \
+	src/guestctrl/UIFileManager.cpp \
+	src/guestctrl/UIFileManagerLogPanel.cpp \
+	src/guestctrl/UIFileManagerOperationsPanel.cpp \
+	src/guestctrl/UIFileManagerTable.cpp \
+	src/guestctrl/UIFileManagerGuestTable.cpp \
 	src/guestctrl/UIGuestProcessControlWidget.cpp \
-	src/guestctrl/UIHostFileTable.cpp \
+	src/guestctrl/UIFileManagerHostTable.cpp \
 	src/settings/global/UIGlobalSettingsInput.cpp \
 	src/settings/machine/UIMachineSettingsNetwork.cpp \
@@ -1289,12 +1289,12 @@
 	src/runtime/UIFrameBuffer.cpp \
 	src/runtime/UIIndicatorsPool.cpp \
-	src/guestctrl/UIGuestControlFileManager.cpp \
-	src/guestctrl/UIGuestControlFileManagerLogPanel.cpp \
-	src/guestctrl/UIGuestControlFileManagerOperationsPanel.cpp \
-	src/guestctrl/UIGuestControlFileManagerSessionPanel.cpp \
-	src/guestctrl/UIGuestControlFileTable.cpp \
-	src/guestctrl/UIGuestFileTable.cpp \
+	src/guestctrl/UIFileManager.cpp \
+	src/guestctrl/UIFileManagerLogPanel.cpp \
+	src/guestctrl/UIFileManagerOperationsPanel.cpp \
+	src/guestctrl/UIFileManagerSessionPanel.cpp \
+	src/guestctrl/UIFileManagerTable.cpp \
+	src/guestctrl/UIFileManagerGuestTable.cpp \
 	src/guestctrl/UIGuestProcessControlWidget.cpp \
-	src/guestctrl/UIHostFileTable.cpp \
+	src/guestctrl/UIFileManagerHostTable.cpp \
 	src/widgets/UIMiniToolBar.cpp
 
@@ -1569,19 +1569,19 @@
 	src/runtime/information/UIVMInformationDialog.cpp \
 	src/guestctrl/UIGuestControlConsole.cpp \
-	src/guestctrl/UIGuestControlFileManager.cpp \
-	src/guestctrl/UIGuestControlFileManagerDialog.cpp \
-	src/guestctrl/UIGuestControlFileManagerLogPanel.cpp \
-	src/guestctrl/UIGuestControlFileManagerOperationsPanel.cpp \
-	src/guestctrl/UIGuestControlFileManagerOptionsPanel.cpp \
-	src/guestctrl/UIGuestControlFileManagerPanel.cpp \
-	src/guestctrl/UIGuestControlFileManagerSessionPanel.cpp \
-	src/guestctrl/UIGuestControlFileModel.cpp \
-	src/guestctrl/UIGuestControlFileTable.cpp \
+	src/guestctrl/UIFileManager.cpp \
+	src/guestctrl/UIFileManagerDialog.cpp \
+	src/guestctrl/UIFileManagerLogPanel.cpp \
+	src/guestctrl/UIFileManagerOperationsPanel.cpp \
+	src/guestctrl/UIFileManagerOptionsPanel.cpp \
+	src/guestctrl/UIFileManagerPanel.cpp \
+	src/guestctrl/UIFileManagerSessionPanel.cpp \
+	src/guestctrl/UIFileManagerModel.cpp \
+	src/guestctrl/UIFileManagerTable.cpp \
 	src/guestctrl/UIGuestControlInterface.cpp \
 	src/guestctrl/UIGuestControlTreeItem.cpp \
-	src/guestctrl/UIGuestFileTable.cpp \
+	src/guestctrl/UIFileManagerGuestTable.cpp \
 	src/guestctrl/UIGuestProcessControlDialog.cpp \
 	src/guestctrl/UIGuestProcessControlWidget.cpp \
-	src/guestctrl/UIHostFileTable.cpp \
+	src/guestctrl/UIFileManagerHostTable.cpp \
 	src/runtime/normal/UIKeyboardHandlerNormal.cpp \
 	src/runtime/normal/UIMachineLogicNormal.cpp \
@@ -1748,19 +1748,19 @@
 	src/runtime/information/UIVMInformationDialog.cpp \
 	src/guestctrl/UIGuestControlConsole.cpp \
-	src/guestctrl/UIGuestControlFileManager.cpp \
-	src/guestctrl/UIGuestControlFileManagerDialog.cpp \
-	src/guestctrl/UIGuestControlFileManagerLogPanel.cpp \
-	src/guestctrl/UIGuestControlFileManagerOperationsPanel.cpp \
-	src/guestctrl/UIGuestControlFileManagerOptionsPanel.cpp \
-	src/guestctrl/UIGuestControlFileManagerPanel.cpp \
-	src/guestctrl/UIGuestControlFileManagerSessionPanel.cpp \
-	src/guestctrl/UIGuestControlFileModel.cpp \
-	src/guestctrl/UIGuestControlFileTable.cpp \
+	src/guestctrl/UIFileManager.cpp \
+	src/guestctrl/UIFileManagerDialog.cpp \
+	src/guestctrl/UIFileManagerLogPanel.cpp \
+	src/guestctrl/UIFileManagerOperationsPanel.cpp \
+	src/guestctrl/UIFileManagerOptionsPanel.cpp \
+	src/guestctrl/UIFileManagerPanel.cpp \
+	src/guestctrl/UIFileManagerSessionPanel.cpp \
+	src/guestctrl/UIFileManagerModel.cpp \
+	src/guestctrl/UIFileManagerTable.cpp \
 	src/guestctrl/UIGuestControlInterface.cpp \
 	src/guestctrl/UIGuestControlTreeItem.cpp \
-	src/guestctrl/UIGuestFileTable.cpp \
+	src/guestctrl/UIFileManagerGuestTable.cpp \
 	src/guestctrl/UIGuestProcessControlWidget.cpp \
 	src/guestctrl/UIGuestProcessControlDialog.cpp \
-	src/guestctrl/UIHostFileTable.cpp \
+	src/guestctrl/UIFileManagerHostTable.cpp \
 	src/runtime/normal/UIKeyboardHandlerNormal.cpp \
 	src/runtime/normal/UIMachineLogicNormal.cpp \
Index: /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 76176)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 76177)
@@ -561,5 +561,5 @@
         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TakeSnapshot:                  strResult = "TakeSnapshot"; break;
         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_InformationDialog:             strResult = "InformationDialog"; break;
-        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_GuestControlFileManagerDialog: strResult = "GuestControlFileManagerDialog"; break;
+        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_FileManagerDialog:             strResult = "FileManagerDialog"; break;
         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_GuestProcessControlDialog:     strResult = "GuestProcessControlDialog"; break;
         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Pause:                         strResult = "Pause"; break;
@@ -589,5 +589,5 @@
     keys << "TakeSnapshot";                  values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TakeSnapshot;
     keys << "InformationDialog";             values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_InformationDialog;
-    keys << "GuestControlFileManagerDialog"; values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_GuestControlFileManagerDialog;
+    keys << "FileManagerDialog";             values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_FileManagerDialog;
     keys << "GuestProcessControlDialog";     values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_GuestProcessControlDialog;
     keys << "Pause";                         values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Pause;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 76176)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 76177)
@@ -204,5 +204,5 @@
 const char *UIExtraDataDefs::GUI_GuestControl_ProcessControlDialogGeometry = "GUI/GuestControl/ProcessControlDialogGeometry";
 
-/* Guest Control file manager options: */
+/* File Manager options: */
 const char *UIExtraDataDefs::GUI_GuestControl_FileManagerOptions = "GUI/GuestControl/FileManagerOptions";
 const char *UIExtraDataDefs::GUI_GuestControl_FileManagerListDirectoriesFirst = "ListDirectoriesFirst";
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 76176)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 76177)
@@ -365,5 +365,5 @@
     /** @} */
 
-    /** @name Guest Control file manager options
+    /** @name File Manager options
       * @{ */
         extern const char *GUI_GuestControl_FileManagerOptions;
@@ -501,5 +501,5 @@
         RuntimeMenuMachineActionType_TakeSnapshot                  = RT_BIT(1),
         RuntimeMenuMachineActionType_InformationDialog             = RT_BIT(2),
-        RuntimeMenuMachineActionType_GuestControlFileManagerDialog = RT_BIT(3),
+        RuntimeMenuMachineActionType_FileManagerDialog             = RT_BIT(3),
         RuntimeMenuMachineActionType_GuestProcessControlDialog     = RT_BIT(4),
         RuntimeMenuMachineActionType_Pause                         = RT_BIT(5),
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 76176)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 76177)
@@ -4219,10 +4219,10 @@
 }
 
-QRect UIExtraDataManager::guestControlFileManagerDialogGeometry(QWidget *pWidget, const QRect &defaultGeometry)
+QRect UIExtraDataManager::fileManagerDialogGeometry(QWidget *pWidget, const QRect &defaultGeometry)
 {
     return dialogGeometry(GUI_GuestControl_FileManagerDialogGeometry, pWidget, defaultGeometry);
 }
 
-bool UIExtraDataManager::guestControlFileManagerDialogShouldBeMaximized()
+bool UIExtraDataManager::fileManagerDialogShouldBeMaximized()
 {
     /* Get corresponding extra-data: */
@@ -4233,21 +4233,21 @@
 }
 
-void UIExtraDataManager::setGuestControlFileManagerDialogGeometry(const QRect &geometry, bool fMaximized)
+void UIExtraDataManager::setFileManagerDialogGeometry(const QRect &geometry, bool fMaximized)
 {
     setDialogGeometry(GUI_GuestControl_FileManagerDialogGeometry, geometry, fMaximized);
 }
 
-void UIExtraDataManager::setGuestControlFileManagerVisiblePanels(const QStringList &panelNameList)
+void UIExtraDataManager::setFileManagerVisiblePanels(const QStringList &panelNameList)
 {
     setExtraDataStringList(GUI_GuestControl_FileManagerVisiblePanels, panelNameList);
 }
 
-QStringList UIExtraDataManager::guestControlFileManagerVisiblePanels()
+QStringList UIExtraDataManager::fileManagerVisiblePanels()
 {
     return extraDataStringList(GUI_GuestControl_FileManagerVisiblePanels);
 }
 
-void UIExtraDataManager::setGuestControlFileManagerOptions(bool fListDirectoriesFirst,
-                                       bool fShowDeleteConfirmation, bool fShowHumanReadableSizes)
+void UIExtraDataManager::setFileManagerOptions(bool fListDirectoriesFirst,
+                                               bool fShowDeleteConfirmation, bool fShowHumanReadableSizes)
 {
     /* Serialize passed values: */
@@ -4265,5 +4265,5 @@
 }
 
-bool UIExtraDataManager::guestControlFileManagerListDirectoriesFirst()
+bool UIExtraDataManager::fileManagerListDirectoriesFirst()
 {
     const QStringList data = extraDataStringList(GUI_GuestControl_FileManagerOptions);
@@ -4276,5 +4276,5 @@
 }
 
-bool UIExtraDataManager::guestControlFileManagerShowDeleteConfirmation()
+bool UIExtraDataManager::fileManagerShowDeleteConfirmation()
 {
     const QStringList data = extraDataStringList(GUI_GuestControl_FileManagerOptions);
@@ -4287,5 +4287,5 @@
 }
 
-bool UIExtraDataManager::guestControlFileManagerShowHumanReadableSizes()
+bool UIExtraDataManager::fileManagerShowHumanReadableSizes()
 {
     const QStringList data = extraDataStringList(GUI_GuestControl_FileManagerOptions);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 76176)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 76177)
@@ -638,21 +638,21 @@
         void setGuestControlProcessControlSplitterHints(const QList<int> &hints);
         QList<int> guestControlProcessControlSplitterHints();
-        QRect guestControlFileManagerDialogGeometry(QWidget *pWidget, const QRect &defaultGeometry);
-        bool guestControlFileManagerDialogShouldBeMaximized();
-        void setGuestControlFileManagerDialogGeometry(const QRect &geometry, bool fMaximized);
+        QRect fileManagerDialogGeometry(QWidget *pWidget, const QRect &defaultGeometry);
+        bool fileManagerDialogShouldBeMaximized();
+        void setFileManagerDialogGeometry(const QRect &geometry, bool fMaximized);
         QRect guestProcessControlDialogGeometry(QWidget *pWidget, const QRect &defaultGeometry);
         bool guestProcessControlDialogShouldBeMaximized();
         void setGuestProcessControlDialogGeometry(const QRect &geometry, bool fMaximized);
-        void setGuestControlFileManagerVisiblePanels(const QStringList &panelNameList);
-        QStringList guestControlFileManagerVisiblePanels();
-    /** @} */
-
-    /** @name Guest Control file manager options
-      * @{ */
-        void setGuestControlFileManagerOptions(bool fListDirectoriesFirst,
-                                               bool fShowDeleteConfirmation, bool fshowHumanReadableSizes);
-        bool guestControlFileManagerListDirectoriesFirst();
-        bool guestControlFileManagerShowDeleteConfirmation();
-        bool guestControlFileManagerShowHumanReadableSizes();
+        void setFileManagerVisiblePanels(const QStringList &panelNameList);
+        QStringList fileManagerVisiblePanels();
+    /** @} */
+
+    /** @name File Manager options
+      * @{ */
+        void setFileManagerOptions(bool fListDirectoriesFirst,
+                                   bool fShowDeleteConfirmation, bool fshowHumanReadableSizes);
+        bool fileManagerListDirectoriesFirst();
+        bool fileManagerShowDeleteConfirmation();
+        bool fileManagerShowHumanReadableSizes();
     /** @} */
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.cpp	(revision 76176)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.cpp	(revision 76177)
@@ -1450,13 +1450,13 @@
 };
 
-/** Menu action extension, used as 'Guest Control File Manager' menu class. */
-class UIActionMenuGuestControlFileManager : public UIActionMenu
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManager(UIActionPool *pParent)
+/** Menu action extension, used as 'File Manager' menu class. */
+class UIActionMenuFileManager : public UIActionMenu
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManager(UIActionPool *pParent)
         : UIActionMenu(pParent)
     {}
@@ -1467,5 +1467,5 @@
     virtual QString shortcutExtraDataID() const /* override */
     {
-        return QString("GuestControlFileManagerMenu");
+        return QString("FileManagerMenu");
     }
 
@@ -1478,12 +1478,12 @@
 };
 
-class UIActionMenuGuestControlFileManagerHostSubmenu : public UIActionMenu
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerHostSubmenu(UIActionPool *pParent)
+class UIActionMenuFileManagerHostSubmenu : public UIActionMenu
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerHostSubmenu(UIActionPool *pParent)
         : UIActionMenu(pParent)
     {}
@@ -1494,5 +1494,5 @@
     virtual QString shortcutExtraDataID() const /* override */
     {
-        return QString("GuestControlFileManagerHostSubmenu");
+        return QString("FileManagerHostSubmenu");
     }
 
@@ -1505,12 +1505,12 @@
 };
 
-class UIActionMenuGuestControlFileManagerGuestSubmenu : public UIActionMenu
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerGuestSubmenu(UIActionPool *pParent)
+class UIActionMenuFileManagerGuestSubmenu : public UIActionMenu
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerGuestSubmenu(UIActionPool *pParent)
         : UIActionMenu(pParent)
     {}
@@ -1521,5 +1521,5 @@
     virtual QString shortcutExtraDataID() const /* override */
     {
-        return QString("GuestControlFileManagerGuestSubmenu");
+        return QString("FileManagerGuestSubmenu");
     }
 
@@ -1533,13 +1533,13 @@
 
 
-/** Simple action extension, used as 'Copy to Guest' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerCopyToGuest : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerCopyToGuest(UIActionPool *pParent)
+/** Simple action extension, used as 'Copy to Guest' in file manager action class. */
+class UIActionMenuFileManagerCopyToGuest : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerCopyToGuest(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_copy_to_guest_24px.png", ":/file_manager_copy_to_guest_16px.png",
@@ -1564,5 +1564,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Copy to guest"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setToolTip(QApplication::translate("UIActionPool", "Copy the Selected Object(s) from Host to Guest"));
         setStatusTip(QApplication::translate("UIActionPool", "Copy the selected object(s) from host to guest"));
@@ -1570,13 +1570,13 @@
 };
 
-/** Simple action extension, used as 'Copy to Host' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerCopyToHost : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerCopyToHost(UIActionPool *pParent)
+/** Simple action extension, used as 'Copy to Host' in file manager action class. */
+class UIActionMenuFileManagerCopyToHost : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerCopyToHost(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_copy_to_host_24px.png", ":/file_manager_copy_to_host_16px.png",
@@ -1601,5 +1601,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Copy to host"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setToolTip(QApplication::translate("UIActionPool", "Copy the Selected Object(s) from Guest to Host"));
         setStatusTip(QApplication::translate("UIActionPool", "Copy the selected object(s) from guest to host"));
@@ -1607,13 +1607,13 @@
 };
 
-/** Toggle action extension, used to toggle 'File Manager Options' panel in guest control file manager. */
-class UIActionMenuGuestControlFileManagerOptions : public UIActionToggle
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerOptions(UIActionPool *pParent)
+/** Toggle action extension, used to toggle 'File Manager Options' panel in file manager. */
+class UIActionMenuFileManagerOptions : public UIActionToggle
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerOptions(UIActionPool *pParent)
         : UIActionToggle(pParent)
     {
@@ -1647,13 +1647,13 @@
 };
 
-/** Toggle action extension, used to toggle 'File Manager Log' panel in guest control file manager. */
-class UIActionMenuGuestControlFileManagerLog : public UIActionToggle
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerLog(UIActionPool *pParent)
+/** Toggle action extension, used to toggle 'File Manager Log' panel in file manager. */
+class UIActionMenuFileManagerLog : public UIActionToggle
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerLog(UIActionPool *pParent)
         : UIActionToggle(pParent)
     {
@@ -1687,13 +1687,13 @@
 };
 
-/** Toggle action extension, used to toggle 'File Manager File Operations' panel in guest control file manager. */
-class UIActionMenuGuestControlFileManagerFileOperations : public UIActionToggle
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerFileOperations(UIActionPool *pParent)
+/** Toggle action extension, used to toggle 'File Manager Operations' panel in file manager. */
+class UIActionMenuFileManagerOperations : public UIActionToggle
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerOperations(UIActionPool *pParent)
         : UIActionToggle(pParent)
     {
@@ -1708,5 +1708,5 @@
     virtual QString shortcutExtraDataID() const /* override */
     {
-        return QString("ToggleFileManagerFileOperationsPanel");
+        return QString("ToggleFileManagerOperationsPanel");
     }
 
@@ -1727,13 +1727,13 @@
 };
 
-/** Toggle action extension, used to toggle 'File Manager Session' panel in guest control file manager. */
-class UIActionMenuGuestControlFileManagerSession : public UIActionToggle
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerSession(UIActionPool *pParent)
+/** Toggle action extension, used to toggle 'File Manager Session' panel in file manager. */
+class UIActionMenuFileManagerSession : public UIActionToggle
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerSession(UIActionPool *pParent)
         : UIActionToggle(pParent)
     {
@@ -1767,13 +1767,13 @@
 };
 
-/** Simple action extension, used as 'Perform GoUp' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerGoUp : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerGoUp(UIActionPool *pParent)
+/** Simple action extension, used as 'Perform GoUp' in file manager action class. */
+class UIActionMenuFileManagerGoUp : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerGoUp(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_go_up_24px.png", ":/file_manager_go_up_16px.png",
@@ -1799,5 +1799,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Go Up"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setStatusTip(QApplication::translate("UIActionPool", "Go one level up to parent folder"));
         setToolTip(QApplication::translate("UIActionPool", "Go One Level Up to Parent Folder"));
@@ -1806,13 +1806,13 @@
 
 
-/** Simple action extension, used as 'Perform GoHome' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerGoHome : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerGoHome(UIActionPool *pParent)
+/** Simple action extension, used as 'Perform GoHome' in file manager action class. */
+class UIActionMenuFileManagerGoHome : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerGoHome(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_go_home_24px.png", ":/file_manager_go_home_16px.png",
@@ -1838,5 +1838,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Go Home"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setStatusTip(QApplication::translate("UIActionPool", "Go to home folder"));
         setToolTip(QApplication::translate("UIActionPool", "Go to Home Folder"));
@@ -1845,13 +1845,13 @@
 
 
-/** Simple action extension, used as 'Perform Delete' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerDelete : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerDelete(UIActionPool *pParent)
+/** Simple action extension, used as 'Perform Delete' in file manager action class. */
+class UIActionMenuFileManagerDelete : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerDelete(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_delete_24px.png", ":/file_manager_delete_16px.png",
@@ -1877,5 +1877,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Delete"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setStatusTip(QApplication::translate("UIActionPool", "Delete selected file object(s)"));
         setToolTip(QApplication::translate("UIActionPool", "Delete Selected File Object(s)"));
@@ -1883,13 +1883,13 @@
 };
 
-/** Simple action extension, used as 'Perform Refresh' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerRefresh : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerRefresh(UIActionPool *pParent)
+/** Simple action extension, used as 'Perform Refresh' in file manager action class. */
+class UIActionMenuFileManagerRefresh : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerRefresh(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_refresh_24px.png", ":/file_manager_refresh_16px.png",
@@ -1915,5 +1915,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Refresh"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setStatusTip(QApplication::translate("UIActionPool", "Refresh"));
         setToolTip(QApplication::translate("UIActionPool", "Refresh"));
@@ -1922,13 +1922,13 @@
 
 
-/** Simple action extension, used as 'Perform Rename' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerRename : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerRename(UIActionPool *pParent)
+/** Simple action extension, used as 'Perform Rename' in file manager action class. */
+class UIActionMenuFileManagerRename : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerRename(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_rename_24px.png", ":/file_manager_rename_16px.png",
@@ -1953,5 +1953,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Rename"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setStatusTip(QApplication::translate("UIActionPool", "Rename"));
         setToolTip(QApplication::translate("UIActionPool", "Rename"));
@@ -1959,13 +1959,13 @@
 };
 
-/** Simple action extension, used as 'Perform Rename' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerCreateNewDirectory : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerCreateNewDirectory(UIActionPool *pParent)
+/** Simple action extension, used as 'Perform Rename' in file manager action class. */
+class UIActionMenuFileManagerCreateNewDirectory : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerCreateNewDirectory(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_new_directory_24px.png", ":/file_manager_new_directory_16px.png",
@@ -1990,5 +1990,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Create New Directory"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setStatusTip(QApplication::translate("UIActionPool", "Create New Directory"));
         setToolTip(QApplication::translate("UIActionPool", "Create New Directory"));
@@ -1997,13 +1997,13 @@
 
 
-/** Simple action extension, used as 'Perform Copy' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerCopy : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerCopy(UIActionPool *pParent)
+/** Simple action extension, used as 'Perform Copy' in file manager action class. */
+class UIActionMenuFileManagerCopy : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerCopy(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_copy_24px.png", ":/file_manager_copy_16px.png",
@@ -2028,5 +2028,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Copy"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setStatusTip(QApplication::translate("UIActionPool", "Copy selected file object(s)"));
         setToolTip(QApplication::translate("UIActionPool", "Copy Selected File Object(s)"));
@@ -2034,13 +2034,13 @@
 };
 
-/** Simple action extension, used as 'Perform Cut' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerCut : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerCut(UIActionPool *pParent)
+/** Simple action extension, used as 'Perform Cut' in file manager action class. */
+class UIActionMenuFileManagerCut : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerCut(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_cut_24px.png", ":/file_manager_cut_16px.png",
@@ -2065,5 +2065,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Cut"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setStatusTip(QApplication::translate("UIActionPool", "Cut selected file object(s)"));
         setToolTip(QApplication::translate("UIActionPool", "Cut Selected File Object(s)"));
@@ -2071,13 +2071,13 @@
 };
 
-/** Simple action extension, used as 'Perform Paste' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerPaste : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerPaste(UIActionPool *pParent)
+/** Simple action extension, used as 'Perform Paste' in file manager action class. */
+class UIActionMenuFileManagerPaste : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerPaste(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_paste_24px.png", ":/file_manager_paste_16px.png",
@@ -2102,5 +2102,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Paste"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setStatusTip(QApplication::translate("UIActionPool", "Paste copied/cut file object(s)"));
         setToolTip(QApplication::translate("UIActionPool", "Paste Copied/Cut File Object(s)"));
@@ -2108,13 +2108,13 @@
 };
 
-/** Simple action extension, used as 'Select All' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerSelectAll : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerSelectAll(UIActionPool *pParent)
+/** Simple action extension, used as 'Select All' in file manager action class. */
+class UIActionMenuFileManagerSelectAll : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerSelectAll(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_select_all_24px.png", ":/file_manager_select_all_16px.png",
@@ -2139,5 +2139,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Select All"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setStatusTip(QApplication::translate("UIActionPool", "Select all files objects"));
         setToolTip(QApplication::translate("UIActionPool", "Select All Files Objects"));
@@ -2146,13 +2146,13 @@
 
 
-/** Simple action extension, used as 'Invert Selection' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerInvertSelection : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerInvertSelection(UIActionPool *pParent)
+/** Simple action extension, used as 'Invert Selection' in file manager action class. */
+class UIActionMenuFileManagerInvertSelection : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerInvertSelection(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_invert_selection_24px.png", ":/file_manager_invert_selection_16px.png",
@@ -2177,5 +2177,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Invert Selection"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setStatusTip(QApplication::translate("UIActionPool", "Invert the current selection"));
         setToolTip(QApplication::translate("UIActionPool", "Invert the Current Selection"));
@@ -2184,13 +2184,13 @@
 
 
-/** Simple action extension, used as 'Show Properties' in guest control file manager action class. */
-class UIActionMenuGuestControlFileManagerShowProperties : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionMenuGuestControlFileManagerShowProperties(UIActionPool *pParent)
+/** Simple action extension, used as 'Show Properties' in file manager action class. */
+class UIActionMenuFileManagerShowProperties : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuFileManagerShowProperties(UIActionPool *pParent)
         : UIActionSimple(pParent,
                          ":/file_manager_properties_24px.png", ":/file_manager_properties_16px.png",
@@ -2215,5 +2215,5 @@
     {
         setName(QApplication::translate("UIActionPool", "Show Properties"));
-        setShortcutScope(QApplication::translate("UIActionPool", "Guest Control File Manager"));
+        setShortcutScope(QApplication::translate("UIActionPool", "File Manager"));
         setStatusTip(QApplication::translate("UIActionPool", "Show the properties of currently selected file object(s)"));
         setToolTip(QApplication::translate("UIActionPool", "Show the Properties of Currently Selected File Object(s)"));
@@ -2430,40 +2430,40 @@
     m_pool[UIActionIndex_M_Log_S_Save] = new UIActionMenuSelectorLogPerformSave(this);
 
-    /* Create 'Guest Control File Manager' actions: */
-    m_pool[UIActionIndex_M_GuestControlFileManager] = new UIActionMenuGuestControlFileManager(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_M_HostSubmenu] = new UIActionMenuGuestControlFileManagerHostSubmenu(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_M_GuestSubmenu] = new UIActionMenuGuestControlFileManagerGuestSubmenu(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_CopyToGuest] = new  UIActionMenuGuestControlFileManagerCopyToGuest(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_CopyToHost] = new  UIActionMenuGuestControlFileManagerCopyToHost(this);
-
-    m_pool[UIActionIndex_M_GuestControlFileManager_T_Options] = new UIActionMenuGuestControlFileManagerOptions(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_T_Log] = new UIActionMenuGuestControlFileManagerLog(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_T_FileOperations] = new UIActionMenuGuestControlFileManagerFileOperations(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_T_Session] = new UIActionMenuGuestControlFileManagerSession(this);
-
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Host_GoUp] = new UIActionMenuGuestControlFileManagerGoUp(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Guest_GoUp] = new UIActionMenuGuestControlFileManagerGoUp(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Host_GoHome] = new UIActionMenuGuestControlFileManagerGoHome(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Guest_GoHome] = new UIActionMenuGuestControlFileManagerGoHome(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Host_Refresh] = new UIActionMenuGuestControlFileManagerRefresh(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Guest_Refresh] = new UIActionMenuGuestControlFileManagerRefresh(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Host_Delete] = new UIActionMenuGuestControlFileManagerDelete(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Guest_Delete] = new UIActionMenuGuestControlFileManagerDelete(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Host_Rename] = new UIActionMenuGuestControlFileManagerRename(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Guest_Rename] = new UIActionMenuGuestControlFileManagerRename(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Host_CreateNewDirectory] = new UIActionMenuGuestControlFileManagerCreateNewDirectory(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Guest_CreateNewDirectory] = new UIActionMenuGuestControlFileManagerCreateNewDirectory(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Host_Copy] = new UIActionMenuGuestControlFileManagerCopy(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Guest_Copy] = new UIActionMenuGuestControlFileManagerCopy(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Host_Cut] = new UIActionMenuGuestControlFileManagerCut(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Guest_Cut] = new UIActionMenuGuestControlFileManagerCut(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Host_Paste] = new UIActionMenuGuestControlFileManagerPaste(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Guest_Paste] = new UIActionMenuGuestControlFileManagerPaste(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Host_SelectAll] = new UIActionMenuGuestControlFileManagerSelectAll(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Guest_SelectAll] = new UIActionMenuGuestControlFileManagerSelectAll(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Host_InvertSelection] = new UIActionMenuGuestControlFileManagerInvertSelection(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Guest_InvertSelection] = new UIActionMenuGuestControlFileManagerInvertSelection(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Host_ShowProperties] = new UIActionMenuGuestControlFileManagerShowProperties(this);
-    m_pool[UIActionIndex_M_GuestControlFileManager_S_Guest_ShowProperties] = new UIActionMenuGuestControlFileManagerShowProperties(this);
+    /* Create 'File Manager' actions: */
+    m_pool[UIActionIndex_M_FileManager] = new UIActionMenuFileManager(this);
+    m_pool[UIActionIndex_M_FileManager_M_HostSubmenu] = new UIActionMenuFileManagerHostSubmenu(this);
+    m_pool[UIActionIndex_M_FileManager_M_GuestSubmenu] = new UIActionMenuFileManagerGuestSubmenu(this);
+    m_pool[UIActionIndex_M_FileManager_S_CopyToGuest] = new  UIActionMenuFileManagerCopyToGuest(this);
+    m_pool[UIActionIndex_M_FileManager_S_CopyToHost] = new  UIActionMenuFileManagerCopyToHost(this);
+
+    m_pool[UIActionIndex_M_FileManager_T_Options] = new UIActionMenuFileManagerOptions(this);
+    m_pool[UIActionIndex_M_FileManager_T_Log] = new UIActionMenuFileManagerLog(this);
+    m_pool[UIActionIndex_M_FileManager_T_Operations] = new UIActionMenuFileManagerOperations(this);
+    m_pool[UIActionIndex_M_FileManager_T_Session] = new UIActionMenuFileManagerSession(this);
+
+    m_pool[UIActionIndex_M_FileManager_S_Host_GoUp] = new UIActionMenuFileManagerGoUp(this);
+    m_pool[UIActionIndex_M_FileManager_S_Guest_GoUp] = new UIActionMenuFileManagerGoUp(this);
+    m_pool[UIActionIndex_M_FileManager_S_Host_GoHome] = new UIActionMenuFileManagerGoHome(this);
+    m_pool[UIActionIndex_M_FileManager_S_Guest_GoHome] = new UIActionMenuFileManagerGoHome(this);
+    m_pool[UIActionIndex_M_FileManager_S_Host_Refresh] = new UIActionMenuFileManagerRefresh(this);
+    m_pool[UIActionIndex_M_FileManager_S_Guest_Refresh] = new UIActionMenuFileManagerRefresh(this);
+    m_pool[UIActionIndex_M_FileManager_S_Host_Delete] = new UIActionMenuFileManagerDelete(this);
+    m_pool[UIActionIndex_M_FileManager_S_Guest_Delete] = new UIActionMenuFileManagerDelete(this);
+    m_pool[UIActionIndex_M_FileManager_S_Host_Rename] = new UIActionMenuFileManagerRename(this);
+    m_pool[UIActionIndex_M_FileManager_S_Guest_Rename] = new UIActionMenuFileManagerRename(this);
+    m_pool[UIActionIndex_M_FileManager_S_Host_CreateNewDirectory] = new UIActionMenuFileManagerCreateNewDirectory(this);
+    m_pool[UIActionIndex_M_FileManager_S_Guest_CreateNewDirectory] = new UIActionMenuFileManagerCreateNewDirectory(this);
+    m_pool[UIActionIndex_M_FileManager_S_Host_Copy] = new UIActionMenuFileManagerCopy(this);
+    m_pool[UIActionIndex_M_FileManager_S_Guest_Copy] = new UIActionMenuFileManagerCopy(this);
+    m_pool[UIActionIndex_M_FileManager_S_Host_Cut] = new UIActionMenuFileManagerCut(this);
+    m_pool[UIActionIndex_M_FileManager_S_Guest_Cut] = new UIActionMenuFileManagerCut(this);
+    m_pool[UIActionIndex_M_FileManager_S_Host_Paste] = new UIActionMenuFileManagerPaste(this);
+    m_pool[UIActionIndex_M_FileManager_S_Guest_Paste] = new UIActionMenuFileManagerPaste(this);
+    m_pool[UIActionIndex_M_FileManager_S_Host_SelectAll] = new UIActionMenuFileManagerSelectAll(this);
+    m_pool[UIActionIndex_M_FileManager_S_Guest_SelectAll] = new UIActionMenuFileManagerSelectAll(this);
+    m_pool[UIActionIndex_M_FileManager_S_Host_InvertSelection] = new UIActionMenuFileManagerInvertSelection(this);
+    m_pool[UIActionIndex_M_FileManager_S_Guest_InvertSelection] = new UIActionMenuFileManagerInvertSelection(this);
+    m_pool[UIActionIndex_M_FileManager_S_Host_ShowProperties] = new UIActionMenuFileManagerShowProperties(this);
+    m_pool[UIActionIndex_M_FileManager_S_Guest_ShowProperties] = new UIActionMenuFileManagerShowProperties(this);
 
 
@@ -2477,5 +2477,5 @@
     m_menuUpdateHandlers[UIActionIndex_M_Log].ptf = &UIActionPool::updateMenuLogViewer;
 
-    m_menuUpdateHandlers[UIActionIndex_M_GuestControlFileManager].ptf = &UIActionPool::updateMenuGuestControlFileManager;
+    m_menuUpdateHandlers[UIActionIndex_M_FileManager].ptf = &UIActionPool::updateMenuFileManager;
 
     /* Invalidate all known menus: */
@@ -2775,54 +2775,54 @@
 }
 
-void UIActionPool::updateMenuGuestControlFileManager()
-{
-    updateMenuGuestControlFileManagerWrapper(action(UIActionIndex_M_GuestControlFileManager)->menu());
+void UIActionPool::updateMenuFileManager()
+{
+    updateMenuFileManagerWrapper(action(UIActionIndex_M_FileManager)->menu());
 
     /* Mark menu as valid: */
-    m_invalidations.remove(UIActionIndex_M_GuestControlFileManager);
-}
-
-void UIActionPool::updateMenuGuestControlFileManagerWrapper(UIMenu *pMenu)
-{
-    addAction(pMenu, action(UIActionIndex_M_GuestControlFileManager_T_Session));
-    addAction(pMenu, action(UIActionIndex_M_GuestControlFileManager_T_Options));
-    addAction(pMenu, action(UIActionIndex_M_GuestControlFileManager_T_FileOperations));
-    addAction(pMenu, action(UIActionIndex_M_GuestControlFileManager_T_Log));
-
-    addAction(pMenu, action(UIActionIndex_M_GuestControlFileManager_M_HostSubmenu));
-    addAction(pMenu, action(UIActionIndex_M_GuestControlFileManager_M_GuestSubmenu));
-
-    UIMenu *pHostSubmenu = action(UIActionIndex_M_GuestControlFileManager_M_HostSubmenu)->menu();
+    m_invalidations.remove(UIActionIndex_M_FileManager);
+}
+
+void UIActionPool::updateMenuFileManagerWrapper(UIMenu *pMenu)
+{
+    addAction(pMenu, action(UIActionIndex_M_FileManager_T_Session));
+    addAction(pMenu, action(UIActionIndex_M_FileManager_T_Options));
+    addAction(pMenu, action(UIActionIndex_M_FileManager_T_Operations));
+    addAction(pMenu, action(UIActionIndex_M_FileManager_T_Log));
+
+    addAction(pMenu, action(UIActionIndex_M_FileManager_M_HostSubmenu));
+    addAction(pMenu, action(UIActionIndex_M_FileManager_M_GuestSubmenu));
+
+    UIMenu *pHostSubmenu = action(UIActionIndex_M_FileManager_M_HostSubmenu)->menu();
     if (pHostSubmenu)
     {
-        addAction(pHostSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_GoUp));
-        addAction(pHostSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_GoHome));
-        addAction(pHostSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_Refresh));
-        addAction(pHostSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_Delete));
-        addAction(pHostSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_Rename));
-        addAction(pHostSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_CreateNewDirectory));
-        addAction(pHostSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_Copy));
-        addAction(pHostSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_Cut));
-        addAction(pHostSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_Paste));
-        addAction(pHostSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_SelectAll));
-        addAction(pHostSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_InvertSelection));
-        addAction(pHostSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_ShowProperties));
-    }
-
-    UIMenu *pGuestSubmenu = action(UIActionIndex_M_GuestControlFileManager_M_GuestSubmenu)->menu();
+        addAction(pHostSubmenu, action(UIActionIndex_M_FileManager_S_Host_GoUp));
+        addAction(pHostSubmenu, action(UIActionIndex_M_FileManager_S_Host_GoHome));
+        addAction(pHostSubmenu, action(UIActionIndex_M_FileManager_S_Host_Refresh));
+        addAction(pHostSubmenu, action(UIActionIndex_M_FileManager_S_Host_Delete));
+        addAction(pHostSubmenu, action(UIActionIndex_M_FileManager_S_Host_Rename));
+        addAction(pHostSubmenu, action(UIActionIndex_M_FileManager_S_Host_CreateNewDirectory));
+        addAction(pHostSubmenu, action(UIActionIndex_M_FileManager_S_Host_Copy));
+        addAction(pHostSubmenu, action(UIActionIndex_M_FileManager_S_Host_Cut));
+        addAction(pHostSubmenu, action(UIActionIndex_M_FileManager_S_Host_Paste));
+        addAction(pHostSubmenu, action(UIActionIndex_M_FileManager_S_Host_SelectAll));
+        addAction(pHostSubmenu, action(UIActionIndex_M_FileManager_S_Host_InvertSelection));
+        addAction(pHostSubmenu, action(UIActionIndex_M_FileManager_S_Host_ShowProperties));
+    }
+
+    UIMenu *pGuestSubmenu = action(UIActionIndex_M_FileManager_M_GuestSubmenu)->menu();
     if (pGuestSubmenu)
     {
-        addAction(pGuestSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Host_GoUp));
-        addAction(pGuestSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Guest_GoHome));
-        addAction(pGuestSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Guest_Refresh));
-        addAction(pGuestSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Guest_Delete));
-        addAction(pGuestSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Guest_Rename));
-        addAction(pGuestSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Guest_CreateNewDirectory));
-        addAction(pGuestSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Guest_Copy));
-        addAction(pGuestSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Guest_Cut));
-        addAction(pGuestSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Guest_Paste));
-        addAction(pGuestSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Guest_SelectAll));
-        addAction(pGuestSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Guest_InvertSelection));
-        addAction(pGuestSubmenu, action(UIActionIndex_M_GuestControlFileManager_S_Guest_ShowProperties));
+        addAction(pGuestSubmenu, action(UIActionIndex_M_FileManager_S_Host_GoUp));
+        addAction(pGuestSubmenu, action(UIActionIndex_M_FileManager_S_Guest_GoHome));
+        addAction(pGuestSubmenu, action(UIActionIndex_M_FileManager_S_Guest_Refresh));
+        addAction(pGuestSubmenu, action(UIActionIndex_M_FileManager_S_Guest_Delete));
+        addAction(pGuestSubmenu, action(UIActionIndex_M_FileManager_S_Guest_Rename));
+        addAction(pGuestSubmenu, action(UIActionIndex_M_FileManager_S_Guest_CreateNewDirectory));
+        addAction(pGuestSubmenu, action(UIActionIndex_M_FileManager_S_Guest_Copy));
+        addAction(pGuestSubmenu, action(UIActionIndex_M_FileManager_S_Guest_Cut));
+        addAction(pGuestSubmenu, action(UIActionIndex_M_FileManager_S_Guest_Paste));
+        addAction(pGuestSubmenu, action(UIActionIndex_M_FileManager_S_Guest_SelectAll));
+        addAction(pGuestSubmenu, action(UIActionIndex_M_FileManager_S_Guest_InvertSelection));
+        addAction(pGuestSubmenu, action(UIActionIndex_M_FileManager_S_Guest_ShowProperties));
     }
 }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.h	(revision 76176)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPool.h	(revision 76177)
@@ -98,38 +98,38 @@
     UIActionIndex_M_Log_S_Save,
 
-    /* Guest control file manager actions: */
-    UIActionIndex_M_GuestControlFileManager,
-    UIActionIndex_M_GuestControlFileManager_M_HostSubmenu,
-    UIActionIndex_M_GuestControlFileManager_M_GuestSubmenu,
-    UIActionIndex_M_GuestControlFileManager_S_CopyToGuest,
-    UIActionIndex_M_GuestControlFileManager_S_CopyToHost,
-    UIActionIndex_M_GuestControlFileManager_T_Options,
-    UIActionIndex_M_GuestControlFileManager_T_Log,
-    UIActionIndex_M_GuestControlFileManager_T_FileOperations,
-    UIActionIndex_M_GuestControlFileManager_T_Session,
-    UIActionIndex_M_GuestControlFileManager_S_Host_GoUp,
-    UIActionIndex_M_GuestControlFileManager_S_Guest_GoUp,
-    UIActionIndex_M_GuestControlFileManager_S_Host_GoHome,
-    UIActionIndex_M_GuestControlFileManager_S_Guest_GoHome,
-    UIActionIndex_M_GuestControlFileManager_S_Host_Refresh,
-    UIActionIndex_M_GuestControlFileManager_S_Guest_Refresh,
-    UIActionIndex_M_GuestControlFileManager_S_Host_Delete,
-    UIActionIndex_M_GuestControlFileManager_S_Guest_Delete,
-    UIActionIndex_M_GuestControlFileManager_S_Host_Rename,
-    UIActionIndex_M_GuestControlFileManager_S_Guest_Rename,
-    UIActionIndex_M_GuestControlFileManager_S_Host_CreateNewDirectory,
-    UIActionIndex_M_GuestControlFileManager_S_Guest_CreateNewDirectory,
-    UIActionIndex_M_GuestControlFileManager_S_Host_Copy,
-    UIActionIndex_M_GuestControlFileManager_S_Guest_Copy,
-    UIActionIndex_M_GuestControlFileManager_S_Host_Cut,
-    UIActionIndex_M_GuestControlFileManager_S_Guest_Cut,
-    UIActionIndex_M_GuestControlFileManager_S_Host_Paste,
-    UIActionIndex_M_GuestControlFileManager_S_Guest_Paste,
-    UIActionIndex_M_GuestControlFileManager_S_Host_SelectAll,
-    UIActionIndex_M_GuestControlFileManager_S_Guest_SelectAll,
-    UIActionIndex_M_GuestControlFileManager_S_Host_InvertSelection,
-    UIActionIndex_M_GuestControlFileManager_S_Guest_InvertSelection,
-    UIActionIndex_M_GuestControlFileManager_S_Host_ShowProperties,
-    UIActionIndex_M_GuestControlFileManager_S_Guest_ShowProperties,
+    /* File Manager actions: */
+    UIActionIndex_M_FileManager,
+    UIActionIndex_M_FileManager_M_HostSubmenu,
+    UIActionIndex_M_FileManager_M_GuestSubmenu,
+    UIActionIndex_M_FileManager_S_CopyToGuest,
+    UIActionIndex_M_FileManager_S_CopyToHost,
+    UIActionIndex_M_FileManager_T_Options,
+    UIActionIndex_M_FileManager_T_Log,
+    UIActionIndex_M_FileManager_T_Operations,
+    UIActionIndex_M_FileManager_T_Session,
+    UIActionIndex_M_FileManager_S_Host_GoUp,
+    UIActionIndex_M_FileManager_S_Guest_GoUp,
+    UIActionIndex_M_FileManager_S_Host_GoHome,
+    UIActionIndex_M_FileManager_S_Guest_GoHome,
+    UIActionIndex_M_FileManager_S_Host_Refresh,
+    UIActionIndex_M_FileManager_S_Guest_Refresh,
+    UIActionIndex_M_FileManager_S_Host_Delete,
+    UIActionIndex_M_FileManager_S_Guest_Delete,
+    UIActionIndex_M_FileManager_S_Host_Rename,
+    UIActionIndex_M_FileManager_S_Guest_Rename,
+    UIActionIndex_M_FileManager_S_Host_CreateNewDirectory,
+    UIActionIndex_M_FileManager_S_Guest_CreateNewDirectory,
+    UIActionIndex_M_FileManager_S_Host_Copy,
+    UIActionIndex_M_FileManager_S_Guest_Copy,
+    UIActionIndex_M_FileManager_S_Host_Cut,
+    UIActionIndex_M_FileManager_S_Guest_Cut,
+    UIActionIndex_M_FileManager_S_Host_Paste,
+    UIActionIndex_M_FileManager_S_Guest_Paste,
+    UIActionIndex_M_FileManager_S_Host_SelectAll,
+    UIActionIndex_M_FileManager_S_Guest_SelectAll,
+    UIActionIndex_M_FileManager_S_Host_InvertSelection,
+    UIActionIndex_M_FileManager_S_Guest_InvertSelection,
+    UIActionIndex_M_FileManager_S_Host_ShowProperties,
+    UIActionIndex_M_FileManager_S_Guest_ShowProperties,
 
 
@@ -612,8 +612,8 @@
     virtual void updateMenuLogViewerWrapper(UIMenu *pMenu);
 
-    /** Updates 'Guest Control Window' menu. */
-    virtual void updateMenuGuestControlFileManager();
-    /** Updates 'Guest Control' @a pMenu. */
-    virtual void updateMenuGuestControlFileManagerWrapper(UIMenu *pMenu);
+    /** Updates 'File Manager' menu. */
+    virtual void updateMenuFileManager();
+    /** Updates 'File Manager' @a pMenu. */
+    virtual void updateMenuFileManagerWrapper(UIMenu *pMenu);
 
     /** Updates shortcuts. */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.cpp	(revision 76176)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.cpp	(revision 76177)
@@ -230,13 +230,13 @@
 };
 
-/** Simple action extension, used as 'Show Guest Control File Manager Dialog' action class. */
-class UIActionSimpleRuntimeShowGuestControlFileManagerDialog : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs action passing @a pParent to the base-class. */
-    UIActionSimpleRuntimeShowGuestControlFileManagerDialog(UIActionPool *pParent)
+/** Simple action extension, used as 'Show File Manager Dialog' action class. */
+class UIActionSimpleRuntimeShowFileManagerDialog : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionSimpleRuntimeShowFileManagerDialog(UIActionPool *pParent)
         : UIActionSimple(pParent, ":/session_info_16px.png", ":/session_info_disabled_16px.png", true)
     {}
@@ -247,21 +247,21 @@
     virtual int extraDataID() const /* override */
     {
-        return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_GuestControlFileManagerDialog;
-    }
-    /** Returns action extra-data key. */
-    virtual QString extraDataKey() const /* override */
-    {
-        return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_GuestControlFileManagerDialog);
-    }
-    /** Returns whether action is allowed. */
-    virtual bool isAllowed() const /* override */
-    {
-        return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_GuestControlFileManagerDialog);
-    }
-
-    /** Returns shortcut extra-data ID. */
-    virtual QString shortcutExtraDataID() const /* override */
-    {
-        return QString("GuestControlFileManagerDialog");
+        return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_FileManagerDialog;
+    }
+    /** Returns action extra-data key. */
+    virtual QString extraDataKey() const /* override */
+    {
+        return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_FileManagerDialog);
+    }
+    /** Returns whether action is allowed. */
+    virtual bool isAllowed() const /* override */
+    {
+        return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_FileManagerDialog);
+    }
+
+    /** Returns shortcut extra-data ID. */
+    virtual QString shortcutExtraDataID() const /* override */
+    {
+        return QString("FileManagerDialog");
     }
 
@@ -276,5 +276,5 @@
     {
         setName(QApplication::translate("UIActionPool", "File Manager..."));
-        setStatusTip(QApplication::translate("UIActionPool", "Display the virtual machine guest control file manager window"));
+        setStatusTip(QApplication::translate("UIActionPool", "Display the virtual machine file manager window"));
     }
 };
@@ -3323,5 +3323,5 @@
     m_pool[UIActionIndexRT_M_Machine_S_TakeSnapshot] = new UIActionSimpleRuntimePerformTakeSnapshot(this);
     m_pool[UIActionIndexRT_M_Machine_S_ShowInformation] = new UIActionSimpleRuntimeShowInformationDialog(this);
-    m_pool[UIActionIndexRT_M_Machine_S_ShowGuestControlFileManager] = new UIActionSimpleRuntimeShowGuestControlFileManagerDialog(this);
+    m_pool[UIActionIndexRT_M_Machine_S_ShowFileManager] = new UIActionSimpleRuntimeShowFileManagerDialog(this);
     m_pool[UIActionIndexRT_M_Machine_S_ShowGuestProcessControl] = new UIActionSimpleRuntimeShowGuestProcessControlDialog(this);
     m_pool[UIActionIndexRT_M_Machine_T_Pause] = new UIActionToggleRuntimePause(this);
@@ -3603,6 +3603,6 @@
     updateMenuLogViewerWindow();
 
-    /* 'Guest Control File Manager' menu: */
-    updateMenuGuestControlFileManager();
+    /* 'File Manager' menu: */
+    updateMenuFileManager();
 }
 
@@ -3632,5 +3632,5 @@
     /* 'Information Dialog' action: */
     fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_S_ShowInformation)) || fSeparator;
-    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_S_ShowGuestControlFileManager)) || fSeparator;
+    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_S_ShowFileManager)) || fSeparator;
 #ifdef VBOX_GUI_WITH_GUEST_CONTROL_UI
     fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_S_ShowGuestProcessControl)) || fSeparator;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.h	(revision 76176)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolRuntime.h	(revision 76177)
@@ -43,5 +43,5 @@
     UIActionIndexRT_M_Machine_S_TakeSnapshot,
     UIActionIndexRT_M_Machine_S_ShowInformation,
-    UIActionIndexRT_M_Machine_S_ShowGuestControlFileManager,
+    UIActionIndexRT_M_Machine_S_ShowFileManager,
     UIActionIndexRT_M_Machine_S_ShowGuestProcessControl,
     UIActionIndexRT_M_Machine_T_Pause,
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManager.cpp	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManager.cpp	(revision 76177)
@@ -0,0 +1,821 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIFileManager class implementation.
+ */
+
+/*
+ * Copyright (C) 2016-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QAbstractItemModel>
+# include <QCheckBox>
+# include <QHBoxLayout>
+# include <QHeaderView>
+# include <QPushButton>
+# include <QSplitter>
+# include <QTableWidget>
+# include <QTextEdit>
+
+/* GUI includes: */
+# include "QILabel.h"
+# include "QILineEdit.h"
+# include "QITabWidget.h"
+# include "QITreeWidget.h"
+# include "QIWithRetranslateUI.h"
+# include "UIActionPool.h"
+# include "UIErrorString.h"
+# include "UIExtraDataManager.h"
+# include "UIIconPool.h"
+# include "UIGuestControlConsole.h"
+# include "UIFileManager.h"
+# include "UIFileManagerSessionPanel.h"
+# include "UIFileManagerOptionsPanel.h"
+# include "UIFileManagerLogPanel.h"
+# include "UIFileManagerOperationsPanel.h"
+# include "UIFileManagerGuestTable.h"
+# include "UIGuestControlInterface.h"
+# include "UIFileManagerHostTable.h"
+# include "UIToolBar.h"
+# include "VBoxGlobal.h"
+
+/* COM includes: */
+# include "CFsObjInfo.h"
+# include "CGuest.h"
+# include "CGuestDirectory.h"
+# include "CGuestFsObjInfo.h"
+# include "CGuestProcess.h"
+# include "CGuestSession.h"
+# include "CGuestSessionStateChangedEvent.h"
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+/*********************************************************************************************************************************
+*   UIFileOperationsList definition.                                                                                   *
+*********************************************************************************************************************************/
+
+class UIFileOperationsList : public QITreeWidget
+{
+    Q_OBJECT;
+public:
+
+    UIFileOperationsList(QWidget *pParent = 0);
+
+private:
+};
+
+
+/*********************************************************************************************************************************
+*   UIFileManagerOptions implementation.                                                                             *
+*********************************************************************************************************************************/
+
+UIFileManagerOptions *UIFileManagerOptions::m_pInstance = 0;
+
+UIFileManagerOptions* UIFileManagerOptions::instance()
+{
+    if (!m_pInstance)
+    m_pInstance = new UIFileManagerOptions;
+    return m_pInstance;
+}
+
+void UIFileManagerOptions::create()
+{
+    if (m_pInstance)
+        return;
+    m_pInstance = new UIFileManagerOptions;
+}
+
+void UIFileManagerOptions::destroy()
+{
+    delete m_pInstance;
+    m_pInstance = 0;
+}
+
+ UIFileManagerOptions::~UIFileManagerOptions()
+{
+
+}
+
+UIFileManagerOptions::UIFileManagerOptions()
+    : bListDirectoriesOnTop(true)
+    , bAskDeleteConfirmation(false)
+    , bShowHumanReadableSizes(true)
+{
+}
+
+/*********************************************************************************************************************************
+*   UIFileOperationsList implementation.                                                                                   *
+*********************************************************************************************************************************/
+
+UIFileOperationsList::UIFileOperationsList(QWidget *pParent)
+    :QITreeWidget(pParent)
+{}
+
+
+/*********************************************************************************************************************************
+*   UIFileManager implementation.                                                                                    *
+*********************************************************************************************************************************/
+
+UIFileManager::UIFileManager(EmbedTo enmEmbedding, UIActionPool *pActionPool,
+                                                     const CGuest &comGuest, QWidget *pParent, bool fShowToolbar /* = true */)
+    : QIWithRetranslateUI<QWidget>(pParent)
+    , m_comGuest(comGuest)
+    , m_pMainLayout(0)
+    , m_pVerticalSplitter(0)
+    , m_pToolBar(0)
+    , m_pVerticalToolBar(0)
+    , m_pGuestFileTable(0)
+    , m_pHostFileTable(0)
+    , m_enmEmbedding(enmEmbedding)
+    , m_pActionPool(pActionPool)
+    , m_fShowToolbar(fShowToolbar)
+    , m_pOptionsPanel(0)
+    , m_pLogPanel(0)
+    , m_pSessionPanel(0)
+    , m_pOperationsPanel(0)
+{
+    loadOptions();
+    prepareGuestListener();
+    prepareObjects();
+    prepareConnections();
+    retranslateUi();
+    restorePanelVisibility();
+    UIFileManagerOptions::create();
+}
+
+UIFileManager::~UIFileManager()
+{
+    if (m_comGuest.isOk() && m_pQtGuestListener && m_comGuestListener.isOk())
+        cleanupListener(m_pQtGuestListener, m_comGuestListener, m_comGuest.GetEventSource());
+    if (m_comGuestSession.isOk() && m_pQtSessionListener && m_comSessionListener.isOk())
+        cleanupListener(m_pQtSessionListener, m_comSessionListener, m_comGuestSession.GetEventSource());
+
+    if (m_comGuestSession.isOk())
+        m_comGuestSession.Close();
+
+    saveOptions();
+    UIFileManagerOptions::destroy();
+}
+
+QMenu *UIFileManager::menu() const
+{
+    if (!m_pActionPool)
+        return 0;
+    return m_pActionPool->action(UIActionIndex_M_FileManager)->menu();
+}
+
+void UIFileManager::retranslateUi()
+{
+}
+
+void UIFileManager::prepareGuestListener()
+{
+    if (m_comGuest.isOk())
+    {
+        QVector<KVBoxEventType> eventTypes;
+        eventTypes << KVBoxEventType_OnGuestSessionRegistered;
+
+        prepareListener(m_pQtGuestListener, m_comGuestListener,
+                        m_comGuest.GetEventSource(), eventTypes);
+    }
+}
+
+void UIFileManager::prepareObjects()
+{
+    /* m_pMainLayout is the outer most layout containing the main toolbar and splitter widget: */
+    m_pMainLayout = new QVBoxLayout(this);
+    if (!m_pMainLayout)
+        return;
+
+    /* Configure layout: */
+    m_pMainLayout->setContentsMargins(0, 0, 0, 0);
+#ifdef VBOX_WS_MAC
+    m_pMainLayout->setSpacing(10);
+#else
+    m_pMainLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
+#endif
+
+    if (m_fShowToolbar)
+        prepareToolBar();
+    /* Two widgets are inserted into this splitter. Upper pWidget widget is a container with file tables and all the panels
+       except the log panel and lower widget is the log panel: */
+    m_pVerticalSplitter = new QSplitter;
+    if (!m_pVerticalSplitter)
+        return;
+
+    m_pMainLayout->addWidget(m_pVerticalSplitter);
+    m_pVerticalSplitter->setOrientation(Qt::Vertical);
+    m_pVerticalSplitter->setHandleWidth(4);
+
+    QHBoxLayout *pFileTableContainerLayout = new QHBoxLayout;
+    pFileTableContainerLayout->setContentsMargins(0, 0, 0, 0);
+#ifdef VBOX_WS_MAC
+    pFileTableContainerLayout->setSpacing(10);
+#else
+    pFileTableContainerLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
+#endif
+
+    QWidget *pTopWidget = new QWidget;
+    QVBoxLayout *pTopLayout = new QVBoxLayout;
+    pTopLayout->setSpacing(0);
+    pTopLayout->setContentsMargins(0, 0, 0, 0);
+
+    pTopWidget->setLayout(pTopLayout);
+
+    if (pFileTableContainerLayout)
+    {
+        pFileTableContainerLayout->setSpacing(0);
+        pFileTableContainerLayout->setContentsMargins(0, 0, 0, 0);
+        m_pGuestFileTable = new UIFileManagerGuestTable(m_pActionPool);
+        m_pGuestFileTable->setEnabled(false);
+
+        m_pHostFileTable = new UIFileManagerHostTable(m_pActionPool);
+        if (m_pHostFileTable)
+        {
+            connect(m_pHostFileTable, &UIFileManagerHostTable::sigLogOutput,
+                    this, &UIFileManager::sltReceieveLogOutput);
+            connect(m_pHostFileTable, &UIFileManagerHostTable::sigDeleteConfirmationOptionChanged,
+                    this, &UIFileManager::sltHandleOptionsUpdated);
+            pFileTableContainerLayout->addWidget(m_pHostFileTable);
+        }
+        prepareVerticalToolBar(pFileTableContainerLayout);
+        if (m_pGuestFileTable)
+        {
+            connect(m_pGuestFileTable, &UIFileManagerGuestTable::sigLogOutput,
+                    this, &UIFileManager::sltReceieveLogOutput);
+            connect(m_pGuestFileTable, &UIFileManagerGuestTable::sigNewFileOperation,
+                    this, &UIFileManager::sltReceieveNewFileOperation);
+            connect(m_pGuestFileTable, &UIFileManagerGuestTable::sigDeleteConfirmationOptionChanged,
+                    this, &UIFileManager::sltHandleOptionsUpdated);
+            pFileTableContainerLayout->addWidget(m_pGuestFileTable);
+        }
+    }
+
+    pTopLayout->addLayout(pFileTableContainerLayout);
+    m_pSessionPanel = new UIFileManagerSessionPanel(this /* manager dialog */, 0 /*parent */);
+    if (m_pSessionPanel)
+    {
+        m_pSessionPanel->hide();
+        m_panelActionMap.insert(m_pSessionPanel, m_pActionPool->action(UIActionIndex_M_FileManager_T_Session));
+        pTopLayout->addWidget(m_pSessionPanel);
+    }
+
+    m_pOptionsPanel =
+        new UIFileManagerOptionsPanel(this /* manager dialog */,
+                                                   0 /*parent */, UIFileManagerOptions::instance());
+    if (m_pOptionsPanel)
+    {
+        m_pOptionsPanel->hide();
+        m_panelActionMap.insert(m_pOptionsPanel, m_pActionPool->action(UIActionIndex_M_FileManager_T_Options));
+        connect(m_pOptionsPanel, &UIFileManagerOptionsPanel::sigOptionsChanged,
+                this, &UIFileManager::sltListDirectoriesBeforeChanged);
+        pTopLayout->addWidget(m_pOptionsPanel);
+    }
+
+    m_pVerticalSplitter->addWidget(pTopWidget);
+
+    m_pOperationsPanel =
+        new UIFileManagerOperationsPanel(this /* manager dialog */, 0 /*parent */);
+    if (m_pOperationsPanel)
+    {
+        m_pOperationsPanel->hide();
+        connect(m_pOperationsPanel, &UIFileManagerOperationsPanel::sigFileOperationComplete,
+                this, &UIFileManager::sltFileOperationComplete);
+        connect(m_pOperationsPanel, &UIFileManagerOperationsPanel::sigFileOperationFail,
+                this, &UIFileManager::sltReceieveLogOutput);
+        m_panelActionMap.insert(m_pOperationsPanel, m_pActionPool->action(UIActionIndex_M_FileManager_T_Operations));
+    }
+
+    m_pLogPanel = new UIFileManagerLogPanel(this /* manager dialog */, 0 /*parent */);
+    if (m_pLogPanel)
+    {
+        m_pLogPanel->hide();
+        m_panelActionMap.insert(m_pLogPanel, m_pActionPool->action(UIActionIndex_M_FileManager_T_Log));
+    }
+
+    m_pVerticalSplitter->addWidget(pTopWidget);
+    m_pVerticalSplitter->addWidget(m_pOperationsPanel);
+    m_pVerticalSplitter->addWidget(m_pLogPanel);
+    m_pVerticalSplitter->setCollapsible(m_pVerticalSplitter->indexOf(pTopWidget), false);
+    m_pVerticalSplitter->setCollapsible(m_pVerticalSplitter->indexOf(m_pOperationsPanel), false);
+    m_pVerticalSplitter->setCollapsible(m_pVerticalSplitter->indexOf(m_pLogPanel), false);
+    m_pVerticalSplitter->setStretchFactor(0, 3);
+    m_pVerticalSplitter->setStretchFactor(1, 1);
+    m_pVerticalSplitter->setStretchFactor(2, 1);
+}
+
+void UIFileManager::prepareVerticalToolBar(QHBoxLayout *layout)
+{
+    m_pVerticalToolBar = new UIToolBar;
+    if (!m_pVerticalToolBar)
+        return;
+
+    m_pVerticalToolBar->setOrientation(Qt::Vertical);
+    m_pVerticalToolBar->setEnabled(false);
+
+    /* Add to dummy QWidget to toolbar to center the action icons vertically: */
+    QWidget *topSpacerWidget = new QWidget(this);
+    topSpacerWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
+    topSpacerWidget->setVisible(true);
+    QWidget *bottomSpacerWidget = new QWidget(this);
+    bottomSpacerWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
+    bottomSpacerWidget->setVisible(true);
+
+    m_pVerticalToolBar->addWidget(topSpacerWidget);
+    m_pVerticalToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_CopyToHost));
+    m_pVerticalToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_CopyToGuest));
+    m_pVerticalToolBar->addWidget(bottomSpacerWidget);
+
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_CopyToHost), &QAction::triggered,
+            this, &UIFileManager::sltCopyGuestToHost);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_CopyToGuest), &QAction::triggered,
+             this, &UIFileManager::sltCopyHostToGuest);
+
+    layout ->addWidget(m_pVerticalToolBar);
+}
+
+void UIFileManager::prepareConnections()
+{
+    if (m_pQtGuestListener)
+    {
+        connect(m_pQtGuestListener->getWrapped(), &UIMainEventListener::sigGuestSessionUnregistered,
+                this, &UIFileManager::sltGuestSessionUnregistered);
+    }
+    if (m_pSessionPanel)
+    {
+        connect(m_pSessionPanel, &UIFileManagerSessionPanel::sigCreateSession,
+                this, &UIFileManager::sltCreateSession);
+        connect(m_pSessionPanel, &UIFileManagerSessionPanel::sigCloseSession,
+                this, &UIFileManager::sltCloseSession);
+    }
+}
+
+void UIFileManager::prepareToolBar()
+{
+    /* Create toolbar: */
+    m_pToolBar = new UIToolBar(parentWidget());
+    if (m_pToolBar)
+    {
+        /* Configure toolbar: */
+        const int iIconMetric = (int)(QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize));
+        m_pToolBar->setIconSize(QSize(iIconMetric, iIconMetric));
+        m_pToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_T_Session));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_T_Options));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_T_Operations));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_T_Log));
+
+        connect(m_pActionPool->action(UIActionIndex_M_FileManager_T_Options), &QAction::toggled,
+                this, &UIFileManager::sltPanelActionToggled);
+        connect(m_pActionPool->action(UIActionIndex_M_FileManager_T_Log), &QAction::toggled,
+                this, &UIFileManager::sltPanelActionToggled);
+        connect(m_pActionPool->action(UIActionIndex_M_FileManager_T_Session), &QAction::toggled,
+                this, &UIFileManager::sltPanelActionToggled);
+        connect(m_pActionPool->action(UIActionIndex_M_FileManager_T_Operations), &QAction::toggled,
+                this, &UIFileManager::sltPanelActionToggled);
+
+#ifdef TEST_COPY
+
+        m_pToolBar->addSeparator();
+        QAction *pSession = new QAction("session", this);
+        QAction *pCopy = new QAction("Copy", this);
+        m_pToolBar->addAction(pSession);
+        m_pToolBar->addAction(pCopy);
+
+        connect(pSession, &QAction::triggered,
+                this, &UIFileManager::sltTestSession);
+        connect(pCopy, &QAction::triggered,
+                this, &UIFileManager::sltTestCopy);
+
+#endif
+
+#ifdef VBOX_WS_MAC
+        /* Check whether we are embedded into a stack: */
+        if (m_enmEmbedding == EmbedTo_Stack)
+        {
+            /* Add into layout: */
+            m_pMainLayout->addWidget(m_pToolBar);
+        }
+#else
+        /* Add into layout: */
+        m_pMainLayout->addWidget(m_pToolBar);
+#endif
+    }
+}
+
+
+void UIFileManager::sltGuestSessionUnregistered(CGuestSession guestSession)
+{
+    if (guestSession.isNull())
+        return;
+    if (guestSession == m_comGuestSession && !m_comGuestSession.isNull())
+    {
+        m_comGuestSession.detach();
+        postSessionClosed();
+    }
+}
+
+void UIFileManager::sltCreateSession(QString strUserName, QString strPassword)
+{
+    if (!UIGuestControlInterface::isGuestAdditionsAvailable(m_comGuest))
+    {
+        appendLog("Could not find Guest Additions", FileManagerLogType_Error);
+        postSessionClosed();
+        return;
+    }
+    if (strUserName.isEmpty())
+    {
+        appendLog("No user name is given", FileManagerLogType_Error);
+        return;
+    }
+    createSession(strUserName, strPassword);
+}
+
+void UIFileManager::sltCloseSession()
+{
+    if (!m_comGuestSession.isOk())
+    {
+        appendLog("Guest session is not valid", FileManagerLogType_Error);
+        postSessionClosed();
+        return;
+    }
+    if (m_pGuestFileTable)
+        m_pGuestFileTable->reset();
+
+    if (m_comGuestSession.isOk() && m_pQtSessionListener && m_comSessionListener.isOk())
+        cleanupListener(m_pQtSessionListener, m_comSessionListener, m_comGuestSession.GetEventSource());
+
+    m_comGuestSession.Close();
+    appendLog("Guest session is closed", FileManagerLogType_Info);
+    postSessionClosed();
+}
+
+void UIFileManager::sltGuestSessionStateChanged(const CGuestSessionStateChangedEvent &cEvent)
+{
+    if (cEvent.isOk() /*&& m_comGuestSession.isOk()*/)
+    {
+        CVirtualBoxErrorInfo cErrorInfo = cEvent.GetError();
+        if (cErrorInfo.isOk())
+            appendLog(cErrorInfo.GetText(), FileManagerLogType_Error);
+    }
+    if (m_comGuestSession.GetStatus() == KGuestSessionStatus_Started)
+    {
+        initFileTable();
+        postSessionCreated();
+    }
+    else
+    {
+        appendLog("Session status has changed", FileManagerLogType_Info);
+    }
+}
+
+void UIFileManager::sltReceieveLogOutput(QString strOutput, FileManagerLogType eLogType)
+{
+    appendLog(strOutput, eLogType);
+}
+
+void UIFileManager::sltCopyGuestToHost()
+{
+    copyToHost();
+}
+
+void UIFileManager::sltCopyHostToGuest()
+{
+    copyToGuest();
+}
+
+void UIFileManager::sltPanelActionToggled(bool fChecked)
+{
+    QAction *pSenderAction = qobject_cast<QAction*>(sender());
+    if (!pSenderAction)
+        return;
+    UIFileManagerPanel* pPanel = 0;
+    /* Look for the sender() within the m_panelActionMap's values: */
+    for (QMap<UIFileManagerPanel*, QAction*>::const_iterator iterator = m_panelActionMap.begin();
+        iterator != m_panelActionMap.end(); ++iterator)
+    {
+        if (iterator.value() == pSenderAction)
+            pPanel = iterator.key();
+    }
+    if (!pPanel)
+        return;
+    if (fChecked)
+        showPanel(pPanel);
+    else
+        hidePanel(pPanel);
+}
+
+void UIFileManager::sltListDirectoriesBeforeChanged()
+{
+    if (m_pGuestFileTable)
+        m_pGuestFileTable->relist();
+    if (m_pHostFileTable)
+        m_pHostFileTable->relist();
+}
+
+void UIFileManager::sltReceieveNewFileOperation(const CProgress &comProgress)
+{
+    if (m_pOperationsPanel)
+        m_pOperationsPanel->addNewProgress(comProgress);
+}
+
+void UIFileManager::sltFileOperationComplete(QUuid progressId)
+{
+    Q_UNUSED(progressId);
+    if (!m_pGuestFileTable || !m_pHostFileTable)
+        return;
+
+    m_pHostFileTable->refresh();
+    m_pGuestFileTable->refresh();
+}
+
+void UIFileManager::sltHandleOptionsUpdated()
+{
+    if (m_pOptionsPanel)
+    {
+        m_pOptionsPanel->update();
+    }
+}
+
+void UIFileManager::copyToHost()
+{
+    if (!m_pGuestFileTable || !m_pHostFileTable)
+        return;
+    QString hostDestinationPath = m_pHostFileTable->currentDirectoryPath();
+    m_pGuestFileTable->copyGuestToHost(hostDestinationPath);
+    m_pHostFileTable->refresh();
+}
+
+void UIFileManager::copyToGuest()
+{
+    if (!m_pGuestFileTable || !m_pHostFileTable)
+        return;
+    QStringList hostSourcePathList = m_pHostFileTable->selectedItemPathList();
+    m_pGuestFileTable->copyHostToGuest(hostSourcePathList);
+    m_pGuestFileTable->refresh();
+}
+
+void UIFileManager::initFileTable()
+{
+    if (!m_comGuestSession.isOk() || m_comGuestSession.GetStatus() != KGuestSessionStatus_Started)
+        return;
+    if (!m_pGuestFileTable)
+        return;
+    m_pGuestFileTable->initGuestFileTable(m_comGuestSession);
+}
+
+void UIFileManager::postSessionCreated()
+{
+    if (m_pSessionPanel)
+        m_pSessionPanel->switchSessionCloseMode();
+    if (m_pGuestFileTable)
+        m_pGuestFileTable->setEnabled(true);
+    if (m_pVerticalToolBar)
+        m_pVerticalToolBar->setEnabled(true);
+}
+
+void UIFileManager::postSessionClosed()
+{
+    if (m_pSessionPanel)
+        m_pSessionPanel->switchSessionCreateMode();
+    if (m_pGuestFileTable)
+        m_pGuestFileTable->setEnabled(false);
+    if (m_pVerticalToolBar)
+        m_pVerticalToolBar->setEnabled(false);
+}
+
+bool UIFileManager::createSession(const QString& strUserName, const QString& strPassword,
+                                              const QString& strDomain /* not used currently */)
+{
+    if (!m_comGuest.isOk())
+        return false;
+    m_comGuestSession = m_comGuest.CreateSession(strUserName, strPassword,
+                                                               strDomain, "File Manager Session");
+
+    if (!m_comGuestSession.isOk())
+    {
+        appendLog(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
+        return false;
+    }
+    appendLog("Guest session has been created", FileManagerLogType_Info);
+    if (m_pSessionPanel)
+        m_pSessionPanel->switchSessionCloseMode();
+
+    /* Prepare session listener */
+    QVector<KVBoxEventType> eventTypes;
+    eventTypes << KVBoxEventType_OnGuestSessionStateChanged;
+    //<< KVBoxEventType_OnGuestProcessRegistered;
+    prepareListener(m_pQtSessionListener, m_comSessionListener,
+                    m_comGuestSession.GetEventSource(), eventTypes);
+
+    /* Connect to session listener */
+    qRegisterMetaType<CGuestSessionStateChangedEvent>();
+
+
+    connect(m_pQtSessionListener->getWrapped(), &UIMainEventListener::sigGuestSessionStatedChanged,
+            this, &UIFileManager::sltGuestSessionStateChanged);
+     /* Wait session to start. For some reason we cannot get GuestSessionStatusChanged event
+        consistently. So we wait: */
+    appendLog("Waiting the session to start", FileManagerLogType_Info);
+    const ULONG waitTimeout = 2000;
+    KGuestSessionWaitResult waitResult = m_comGuestSession.WaitFor(KGuestSessionWaitForFlag_Start, waitTimeout);
+    if (waitResult != KGuestSessionWaitResult_Start)
+    {
+        appendLog("The session did not start", FileManagerLogType_Error);
+        sltCloseSession();
+        return false;
+    }
+    return true;
+}
+
+void UIFileManager::prepareListener(ComObjPtr<UIMainEventListenerImpl> &QtListener,
+                                                CEventListener &comEventListener,
+                                                CEventSource comEventSource, QVector<KVBoxEventType>& eventTypes)
+{
+    if (!comEventSource.isOk())
+        return;
+    /* Create event listener instance: */
+    QtListener.createObject();
+    QtListener->init(new UIMainEventListener, this);
+    comEventListener = CEventListener(QtListener);
+
+    /* Register event listener for CProgress event source: */
+    comEventSource.RegisterListener(comEventListener, eventTypes,
+        gEDataManager->eventHandlingType() == EventHandlingType_Active ? TRUE : FALSE);
+
+    /* If event listener registered as passive one: */
+    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
+    {
+        /* Register event sources in their listeners as well: */
+        QtListener->getWrapped()->registerSource(comEventSource, comEventListener);
+    }
+}
+
+void UIFileManager::cleanupListener(ComObjPtr<UIMainEventListenerImpl> &QtListener,
+                                                CEventListener &comEventListener,
+                                                CEventSource comEventSource)
+{
+    if (!comEventSource.isOk())
+        return;
+    /* If event listener registered as passive one: */
+    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
+    {
+        /* Unregister everything: */
+        QtListener->getWrapped()->unregisterSources();
+    }
+
+    /* Make sure VBoxSVC is available: */
+    if (!vboxGlobal().isVBoxSVCAvailable())
+        return;
+
+    /* Unregister event listener for CProgress event source: */
+    comEventSource.UnregisterListener(comEventListener);
+}
+
+template<typename T>
+QStringList UIFileManager::getFsObjInfoStringList(const T &fsObjectInfo) const
+{
+    QStringList objectInfo;
+    if (!fsObjectInfo.isOk())
+        return objectInfo;
+    objectInfo << fsObjectInfo.GetName();
+    return objectInfo;
+}
+
+void UIFileManager::saveOptions()
+{
+    /* Save a list of currently visible panels: */
+    QStringList strNameList;
+    foreach(UIFileManagerPanel* pPanel, m_visiblePanelsList)
+        strNameList.append(pPanel->panelName());
+    gEDataManager->setFileManagerVisiblePanels(strNameList);
+    /* Save the options: */
+    UIFileManagerOptions *pOptions = UIFileManagerOptions::instance();
+    if (pOptions)
+    {
+        gEDataManager->setFileManagerOptions(pOptions->bListDirectoriesOnTop,
+                                                         pOptions->bAskDeleteConfirmation,
+                                                         pOptions->bShowHumanReadableSizes);
+    }
+}
+
+void UIFileManager::restorePanelVisibility()
+{
+    /** Make sure the actions are set to not-checked. this prevents an unlikely
+     *  bug when the extrakey for the visible panels are manually modified: */
+    foreach(QAction* pAction, m_panelActionMap.values())
+    {
+        pAction->blockSignals(true);
+        pAction->setChecked(false);
+        pAction->blockSignals(false);
+    }
+
+    /* Load the visible panel list and show them: */
+    QStringList strNameList = gEDataManager->fileManagerVisiblePanels();
+    foreach(const QString strName, strNameList)
+    {
+        foreach(UIFileManagerPanel* pPanel, m_panelActionMap.keys())
+        {
+            if (strName == pPanel->panelName())
+            {
+                showPanel(pPanel);
+                break;
+            }
+        }
+    }
+}
+
+void UIFileManager::loadOptions()
+{
+    /* Load options: */
+    UIFileManagerOptions *pOptions = UIFileManagerOptions::instance();
+    if (pOptions)
+    {
+        pOptions->bListDirectoriesOnTop = gEDataManager->fileManagerListDirectoriesFirst();
+        pOptions->bAskDeleteConfirmation = gEDataManager->fileManagerShowDeleteConfirmation();
+        pOptions->bShowHumanReadableSizes = gEDataManager->fileManagerShowHumanReadableSizes();
+    }
+}
+
+void UIFileManager::hidePanel(UIFileManagerPanel* panel)
+{
+    if (panel && panel->isVisible())
+        panel->setVisible(false);
+    QMap<UIFileManagerPanel*, QAction*>::iterator iterator = m_panelActionMap.find(panel);
+    if (iterator != m_panelActionMap.end())
+    {
+        if (iterator.value() && iterator.value()->isChecked())
+            iterator.value()->setChecked(false);
+    }
+    m_visiblePanelsList.removeAll(panel);
+    manageEscapeShortCut();
+}
+
+void UIFileManager::showPanel(UIFileManagerPanel* panel)
+{
+    if (panel && panel->isHidden())
+        panel->setVisible(true);
+    QMap<UIFileManagerPanel*, QAction*>::iterator iterator = m_panelActionMap.find(panel);
+    if (iterator != m_panelActionMap.end())
+    {
+        if (!iterator.value()->isChecked())
+            iterator.value()->setChecked(true);
+    }
+    if (!m_visiblePanelsList.contains(panel))
+        m_visiblePanelsList.push_back(panel);
+    manageEscapeShortCut();
+}
+
+void UIFileManager::manageEscapeShortCut()
+{
+    /* if there is no visible panels give the escape shortcut to parent dialog: */
+    if (m_visiblePanelsList.isEmpty())
+    {
+        emit sigSetCloseButtonShortCut(QKeySequence(Qt::Key_Escape));
+        return;
+    }
+    /* Take the escape shortcut from the dialog: */
+    emit sigSetCloseButtonShortCut(QKeySequence());
+    /* Just loop thru the visible panel list and set the esc key to the
+       panel which made visible latest */
+    for (int i = 0; i < m_visiblePanelsList.size() - 1; ++i)
+    {
+        m_visiblePanelsList[i]->setCloseButtonShortCut(QKeySequence());
+    }
+    m_visiblePanelsList.back()->setCloseButtonShortCut(QKeySequence(Qt::Key_Escape));
+}
+
+void UIFileManager::appendLog(const QString &strLog, FileManagerLogType eLogType)
+{
+    if (!m_pLogPanel)
+        return;
+    m_pLogPanel->appendLog(strLog, eLogType);
+}
+
+void UIFileManager::sltTestSession()
+{
+    createSession("vbox", "password");
+}
+
+void UIFileManager::sltTestCopy()
+{
+    QStringList sources;
+    sources << "/home/serkan/misos/xenialpup-7.5-uefi.iso";
+    if ( m_pGuestFileTable)
+        m_pGuestFileTable->copyHostToGuest(sources, "/home/vbox/test");
+}
+
+#include "UIFileManager.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManager.h	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManager.h	(revision 76177)
@@ -0,0 +1,202 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIFileManager class declaration.
+ */
+
+/*
+ * Copyright (C) 2016-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIFileManager_h___
+#define ___UIFileManager_h___
+
+/* Qt includes: */
+#include <QWidget>
+
+/* COM includes: */
+#include "COMEnums.h"
+#include "CEventListener.h"
+#include "CEventSource.h"
+#include "CGuest.h"
+#include "CGuestSession.h"
+
+/* GUI includes: */
+#include "QIManagerDialog.h"
+#include "QIWithRetranslateUI.h"
+#include "UIGuestControlDefs.h"
+#include "UIMainEventListener.h"
+
+/* Forward declarations: */
+class QHBoxLayout;
+class QSplitter;
+class QTableWidget;
+class QTextEdit;
+class QVBoxLayout;
+class QITabWidget;
+class CGuestSessionStateChangedEvent;
+class UIActionPool;
+class UIFileOperationsList;
+class UIGuestControlConsole;
+class UIGuestControlInterface;
+class UIFileManagerPanel;
+class UIFileManagerLogPanel;
+class UIFileManagerOperationsPanel;
+class UIFileManagerSessionPanel;
+class UIFileManagerOptionsPanel;
+class UIFileManagerGuestTable;
+class UIFileManagerHostTable;
+class UIGuestSessionCreateWidget;
+class UIToolBar;
+
+/** A Utility class to manage file  manager options. */
+class UIFileManagerOptions
+{
+
+public:
+
+    static UIFileManagerOptions* instance();
+    static void create();
+    static void destroy();
+
+    bool bListDirectoriesOnTop;
+    bool bAskDeleteConfirmation;
+    bool bShowHumanReadableSizes;
+
+private:
+
+    UIFileManagerOptions();
+    ~UIFileManagerOptions();
+
+    static UIFileManagerOptions *m_pInstance;
+};
+
+/** A QWidget extension. it includes a QWidget extension for initiating a guest session
+ *  one host and one guest file table views, a log viewer
+ *  and some other file manager related widgets. */
+class UIFileManager : public QIWithRetranslateUI<QWidget>
+{
+    Q_OBJECT;
+
+public:
+
+    UIFileManager(EmbedTo enmEmbedding, UIActionPool *pActionPool,
+                              const CGuest &comGuest, QWidget *pParent, bool fShowToolbar = true);
+    ~UIFileManager();
+    QMenu *menu() const;
+
+#ifdef VBOX_WS_MAC
+    /** Returns the toolbar. */
+    UIToolBar *toolbar() const { return m_pToolBar; }
+#endif
+
+signals:
+
+    void sigSetCloseButtonShortCut(QKeySequence);
+
+protected:
+
+    void retranslateUi();
+
+private slots:
+
+    void sltGuestSessionUnregistered(CGuestSession guestSession);
+    void sltCreateSession(QString strUserName, QString strPassword);
+    void sltCloseSession();
+    void sltGuestSessionStateChanged(const CGuestSessionStateChangedEvent &cEvent);
+    void sltReceieveLogOutput(QString strOutput, FileManagerLogType eLogType);
+    void sltCopyGuestToHost();
+    void sltCopyHostToGuest();
+    void sltPanelActionToggled(bool fChecked);
+    void sltListDirectoriesBeforeChanged();
+    void sltReceieveNewFileOperation(const CProgress &comProgress);
+    void sltFileOperationComplete(QUuid progressId);
+    /** Performs whatever necessary when some signal about option change has been receieved. */
+    void sltHandleOptionsUpdated();
+
+    void sltTestCopy();
+    void sltTestSession();
+
+private:
+
+    void prepareObjects();
+    void prepareGuestListener();
+    void prepareConnections();
+    void prepareVerticalToolBar(QHBoxLayout *layout);
+    void prepareToolBar();
+    bool createSession(const QString& strUserName, const QString& strPassword,
+                       const QString& strDomain = QString() /* not used currently */);
+
+    void prepareListener(ComObjPtr<UIMainEventListenerImpl> &Qtistener,
+                         CEventListener &comEventListener,
+                         CEventSource comEventSource, QVector<KVBoxEventType>& eventTypes);
+
+    void cleanupListener(ComObjPtr<UIMainEventListenerImpl> &QtListener,
+                         CEventListener &comEventListener,
+                         CEventSource comEventSource);
+
+    void initFileTable();
+    /** @name Perform operations needed after creating/ending a guest control session
+      * @{ */
+        void postSessionCreated();
+        void postSessionClosed();
+    /** @} */
+
+    /** Saves list of panels and file manager options to the extra data. */
+    void saveOptions();
+    /** Show the panels that have been visible the last time file manager is closed. */
+    void restorePanelVisibility();
+    /** Loads file manager options. This should be done before widget creation
+     *  since some widgets are initilized with these options */
+    void loadOptions();
+    void hidePanel(UIFileManagerPanel *panel);
+    void showPanel(UIFileManagerPanel *panel);
+    /** Makes sure escape key is assigned to only a single widget. This is done by checking
+        several things in the following order:
+        - when there are no more panels visible assign it to the parent dialog
+        - grab it from the dialog as soon as a panel becomes visible again
+        - assign it to the most recently "unhidden" panel */
+    void manageEscapeShortCut();
+    void copyToGuest();
+    void copyToHost();
+    template<typename T>
+    QStringList               getFsObjInfoStringList(const T &fsObjectInfo) const;
+    void                      appendLog(const QString &strLog, FileManagerLogType eLogType);
+    CGuest                    m_comGuest;
+    CGuestSession             m_comGuestSession;
+    QVBoxLayout              *m_pMainLayout;
+    QSplitter                *m_pVerticalSplitter;
+    UIToolBar                *m_pToolBar;
+    UIToolBar                *m_pVerticalToolBar;
+
+    UIGuestControlConsole    *m_pConsole;
+    UIGuestControlInterface  *m_pControlInterface;
+    UIFileManagerGuestTable         *m_pGuestFileTable;
+    UIFileManagerHostTable   *m_pHostFileTable;
+
+    ComObjPtr<UIMainEventListenerImpl> m_pQtGuestListener;
+    ComObjPtr<UIMainEventListenerImpl> m_pQtSessionListener;
+    CEventListener m_comSessionListener;
+    CEventListener m_comGuestListener;
+    const EmbedTo  m_enmEmbedding;
+    UIActionPool  *m_pActionPool;
+    const bool     m_fShowToolbar;
+    QMap<UIFileManagerPanel*, QAction*> m_panelActionMap;
+    QList<UIFileManagerPanel*>          m_visiblePanelsList;
+    UIFileManagerOptionsPanel          *m_pOptionsPanel;
+    UIFileManagerLogPanel              *m_pLogPanel;
+    UIFileManagerSessionPanel          *m_pSessionPanel;
+    UIFileManagerOperationsPanel       *m_pOperationsPanel;
+    friend class UIFileManagerOptionsPanel;
+    friend class UIFileManagerPanel;
+    friend class UIFileManagerDialog;
+};
+
+#endif /* !___UIFileManager_h___ */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerDialog.cpp	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerDialog.cpp	(revision 76177)
@@ -0,0 +1,168 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIFileManagerDialog class implementation.
+ */
+
+/*
+ * Copyright (C) 2010-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QPushButton>
+# include <QVBoxLayout>
+
+/* GUI includes: */
+# include "UIDesktopWidgetWatchdog.h"
+# include "UIExtraDataManager.h"
+# include "UIIconPool.h"
+# include "UIFileManager.h"
+# include "UIFileManagerDialog.h"
+# include "VBoxGlobal.h"
+# ifdef VBOX_WS_MAC
+#  include "VBoxUtils-darwin.h"
+# endif
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+/*********************************************************************************************************************************
+*   Class UIFileManagerDialogFactory implementation.                                                                 *
+*********************************************************************************************************************************/
+
+UIFileManagerDialogFactory::UIFileManagerDialogFactory(UIActionPool *pActionPool /* = 0 */,
+                                                         const CGuest &comGuest /* = CGuest() */,
+                                                         const QString &strMachineName /* = QString() */)
+    : m_pActionPool(pActionPool)
+    , m_comGuest(comGuest)
+    , m_strMachineName(strMachineName)
+{
+}
+
+void UIFileManagerDialogFactory::create(QIManagerDialog *&pDialog, QWidget *pCenterWidget)
+{
+    pDialog = new UIFileManagerDialog(pCenterWidget, m_pActionPool, m_comGuest, m_strMachineName);
+}
+
+
+/*********************************************************************************************************************************
+*   Class UIFileManagerDialog implementation.                                                                        *
+*********************************************************************************************************************************/
+
+UIFileManagerDialog::UIFileManagerDialog(QWidget *pCenterWidget,
+                                           UIActionPool *pActionPool,
+                                           const CGuest &comGuest,
+                                           const QString &strMachineName /* = QString() */)
+    : QIWithRetranslateUI<QIManagerDialog>(pCenterWidget)
+    , m_pActionPool(pActionPool)
+    , m_comGuest(comGuest)
+    , m_strMachineName(strMachineName)
+{
+}
+
+void UIFileManagerDialog::retranslateUi()
+{
+    /* Translate window title: */
+    setWindowTitle(UIFileManager::tr("%1 - File Manager").arg(m_strMachineName));
+    /* Translate buttons: */
+    button(ButtonType_Close)->setText(UIFileManager::tr("Close"));
+}
+
+void UIFileManagerDialog::configure()
+{
+    /* Apply window icons: */
+    setWindowIcon(UIIconPool::iconSetFull(":/file_manager_32px.png", ":/file_manager_16px.png"));
+}
+
+void UIFileManagerDialog::configureCentralWidget()
+{
+    /* Create widget: */
+    UIFileManager *pWidget = new UIFileManager(EmbedTo_Dialog, m_pActionPool,
+                                                                       m_comGuest, this);
+
+    if (pWidget)
+    {
+        /* Configure widget: */
+        setWidget(pWidget);
+        setWidgetMenu(pWidget->menu());
+#ifdef VBOX_WS_MAC
+        setWidgetToolbar(pWidget->toolbar());
+#endif
+        connect(pWidget, &UIFileManager::sigSetCloseButtonShortCut,
+                this, &UIFileManagerDialog::sltSetCloseButtonShortCut);
+
+        /* Add into layout: */
+        centralWidget()->layout()->addWidget(pWidget);
+    }
+}
+
+void UIFileManagerDialog::finalize()
+{
+    /* Apply language settings: */
+    retranslateUi();
+    manageEscapeShortCut();
+}
+
+void UIFileManagerDialog::loadSettings()
+{
+    const QRect desktopRect = gpDesktop->availableGeometry(this);
+    int iDefaultWidth = desktopRect.width() / 2;
+    int iDefaultHeight = desktopRect.height() * 3 / 4;
+
+    QRect defaultGeometry(0, 0, iDefaultWidth, iDefaultHeight);
+    if (centerWidget())
+        defaultGeometry.moveCenter(centerWidget()->geometry().center());
+
+    /* Load geometry from extradata: */
+    QRect geometry = gEDataManager->fileManagerDialogGeometry(this, defaultGeometry);
+
+    /* Restore geometry: */
+    LogRel2(("GUI: UIFileManagerDialog: Restoring geometry to: Origin=%dx%d, Size=%dx%d\n",
+             geometry.x(), geometry.y(), geometry.width(), geometry.height()));
+    setDialogGeometry(geometry);
+}
+
+void UIFileManagerDialog::saveSettings() const
+{
+    /* Save window geometry to extradata: */
+    const QRect saveGeometry = geometry();
+#ifdef VBOX_WS_MAC
+    /* darwinIsWindowMaximized expects a non-const QWidget*. thus const_cast: */
+    QWidget *pw = const_cast<QWidget*>(qobject_cast<const QWidget*>(this));
+    gEDataManager->setFileManagerDialogGeometry(saveGeometry, ::darwinIsWindowMaximized(pw));
+#else /* !VBOX_WS_MAC */
+    gEDataManager->setFileManagerDialogGeometry(saveGeometry, isMaximized());
+#endif /* !VBOX_WS_MAC */
+    LogRel2(("GUI: File Manager Dialog: Geometry saved as: Origin=%dx%d, Size=%dx%d\n",
+             saveGeometry.x(), saveGeometry.y(), saveGeometry.width(), saveGeometry.height()));
+}
+
+bool UIFileManagerDialog::shouldBeMaximized() const
+{
+    return gEDataManager->fileManagerDialogShouldBeMaximized();
+}
+
+void UIFileManagerDialog::sltSetCloseButtonShortCut(QKeySequence shortcut)
+{
+    if (button(ButtonType_Close))
+        button(ButtonType_Close)->setShortcut(shortcut);
+}
+
+void UIFileManagerDialog::manageEscapeShortCut()
+{
+    UIFileManager *pWidget = qobject_cast<UIFileManager*>(widget());
+    if (!pWidget)
+        return;
+    pWidget->manageEscapeShortCut();
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerDialog.h	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerDialog.h	(revision 76177)
@@ -0,0 +1,114 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIFileManagerDialog class declaration.
+ */
+
+/*
+ * Copyright (C) 2010-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIFileManagerDialog_h___
+#define ___UIFileManagerDialog_h___
+
+/* Qt includes: */
+#include <QString>
+
+/* GUI includes: */
+#include "QIManagerDialog.h"
+#include "QIWithRetranslateUI.h"
+
+/* COM includes: */
+#include "COMEnums.h"
+#include "CGuest.h"
+
+/* Forward declarations: */
+class QDialogButtonBox;
+class QVBoxLayout;
+class UIActionPool;
+class UIFileManagerDialog;
+class CGuest;
+
+
+/** QIManagerDialogFactory extension used as a factory for the file manager dialog. */
+class UIFileManagerDialogFactory : public QIManagerDialogFactory
+{
+public:
+
+    UIFileManagerDialogFactory(UIActionPool *pActionPool = 0, const CGuest &comGuest = CGuest(), const QString &strMachineName = QString());
+
+protected:
+
+    /** Creates derived @a pDialog instance.
+      * @param  pCenterWidget  Passes the widget to center wrt. pCenterWidget. */
+    virtual void create(QIManagerDialog *&pDialog, QWidget *pCenterWidget) /* override */;
+
+    UIActionPool *m_pActionPool;
+    CGuest        m_comGuest;
+    QString       m_strMachineName;
+};
+
+
+/** QIManagerDialog extension providing GUI with the dialog displaying file manager releated logs. */
+class UIFileManagerDialog : public QIWithRetranslateUI<QIManagerDialog>
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs File Manager dialog.
+      * @param  pCenterWidget  Passes the widget reference to center according to.
+      * @param  pActionPool    Passes the action-pool reference.
+      * @param  comGuest       Passes the com-guest reference. */
+    UIFileManagerDialog(QWidget *pCenterWidget, UIActionPool *pActionPool, const CGuest &comGuest, const QString &strMachineName = QString());
+
+protected:
+
+    /** @name Event-handling stuff.
+      * @{ */
+        /** Handles translation event. */
+        virtual void retranslateUi() /* override */;
+    /** @} */
+
+    /** @name Prepare/cleanup cascade.
+     * @{ */
+        /** Configures all. */
+        virtual void configure() /* override */;
+        /** Configures central-widget. */
+        virtual void configureCentralWidget() /* override */;
+        /** Perform final preparations. */
+        virtual void finalize() /* override */;
+        /** Loads dialog setting such as geometry from extradata. */
+        virtual void loadSettings() /* override */;
+
+        /** Saves dialog setting into extradata. */
+        virtual void saveSettings() const /* override */;
+    /** @} */
+
+    /** @name Functions related to geometry restoration.
+     * @{ */
+        /** Returns whether the window should be maximized when geometry being restored. */
+        virtual bool shouldBeMaximized() const /* override */;
+    /** @} */
+
+private slots:
+
+    void sltSetCloseButtonShortCut(QKeySequence shortcut);
+
+private:
+
+    void manageEscapeShortCut();
+    UIActionPool *m_pActionPool;
+    CGuest      m_comGuest;
+    QString     m_strMachineName;
+};
+
+
+#endif /* !___UIFileManagerDialog_h___ */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerGuestTable.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerGuestTable.cpp	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerGuestTable.cpp	(revision 76177)
@@ -0,0 +1,755 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIFileManagerGuestTable class implementation.
+ */
+
+/*
+ * Copyright (C) 2016-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QDateTime>
+# include <QFileInfo>
+# include <QUuid>
+
+/* GUI includes: */
+# include "QILabel.h"
+# include "UIActionPool.h"
+# include "UIErrorString.h"
+# include "UIFileManager.h"
+# include "UIFileManagerGuestTable.h"
+# include "UIMessageCenter.h"
+# include "UIToolBar.h"
+
+/* COM includes: */
+# include "CFsObjInfo.h"
+# include "CGuestFsObjInfo.h"
+# include "CGuestDirectory.h"
+# include "CProgress.h"
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+/*********************************************************************************************************************************
+*   UIGuestDirectoryDiskUsageComputer definition.                                                                                *
+*********************************************************************************************************************************/
+
+/** Open directories recursively and sum the disk usage. Don't block the GUI thread while doing this */
+class UIGuestDirectoryDiskUsageComputer : public UIDirectoryDiskUsageComputer
+{
+    Q_OBJECT;
+
+public:
+
+    UIGuestDirectoryDiskUsageComputer(QObject *parent, QStringList strStartPath, const CGuestSession &session);
+
+protected:
+
+    virtual void run() /* override */;
+    virtual void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics) /* override */;
+
+private:
+
+    CGuestSession m_comGuestSession;
+};
+
+
+/*********************************************************************************************************************************
+*   UIGuestDirectoryDiskUsageComputer implementation.                                                                            *
+*********************************************************************************************************************************/
+
+UIGuestDirectoryDiskUsageComputer::UIGuestDirectoryDiskUsageComputer(QObject *parent, QStringList pathList, const CGuestSession &session)
+    :UIDirectoryDiskUsageComputer(parent, pathList)
+    , m_comGuestSession(session)
+{
+}
+
+void UIGuestDirectoryDiskUsageComputer::run()
+{
+    /* Initialize COM: */
+    COMBase::InitializeCOM(false);
+    UIDirectoryDiskUsageComputer::run();
+    /* Cleanup COM: */
+    COMBase::CleanupCOM();
+}
+
+void UIGuestDirectoryDiskUsageComputer::directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics)
+{
+    if (m_comGuestSession.isNull())
+        return;
+    /* Prevent modification of the continue flag while reading: */
+    m_mutex.lock();
+    /* Check if m_fOkToContinue is set to false. if so just end recursion: */
+    if (!isOkToContinue())
+    {
+        m_mutex.unlock();
+        return;
+    }
+    m_mutex.unlock();
+
+    CGuestFsObjInfo fileInfo = m_comGuestSession.FsObjQueryInfo(path, true);
+
+    if (!m_comGuestSession.isOk())
+        return;
+    /* if the object is a file or a symlink then read the size and return: */
+    if (fileInfo.GetType() == KFsObjType_File)
+    {
+        statistics.m_totalSize += fileInfo.GetObjectSize();
+        ++statistics.m_uFileCount;
+        sigResultUpdated(statistics);
+        return;
+    }
+    else if (fileInfo.GetType() == KFsObjType_Symlink)
+    {
+        statistics.m_totalSize += fileInfo.GetObjectSize();
+        ++statistics.m_uSymlinkCount;
+        sigResultUpdated(statistics);
+        return;
+    }
+
+    if (fileInfo.GetType() != KFsObjType_Directory)
+        return;
+    /* Open the directory to start reading its content: */
+    QVector<KDirectoryOpenFlag> flag(KDirectoryOpenFlag_None);
+    CGuestDirectory directory = m_comGuestSession.DirectoryOpen(path, /*aFilter*/ "", flag);
+    if (!m_comGuestSession.isOk())
+        return;
+
+    if (directory.isOk())
+    {
+        CFsObjInfo fsInfo = directory.Read();
+        while (fsInfo.isOk())
+        {
+            if (fsInfo.GetType() == KFsObjType_File)
+                statistics.m_uFileCount++;
+            else if (fsInfo.GetType() == KFsObjType_Symlink)
+                statistics.m_uSymlinkCount++;
+            else if(fsInfo.GetType() == KFsObjType_Directory)
+            {
+                QString dirPath = UIPathOperations::mergePaths(path, fsInfo.GetName());
+                directoryStatisticsRecursive(dirPath, statistics);
+            }
+        }
+    }
+    sigResultUpdated(statistics);
+}
+
+UIFileManagerGuestTable::UIFileManagerGuestTable(UIActionPool *pActionPool, QWidget *pParent /*= 0*/)
+    :UIFileManagerTable(pActionPool, pParent)
+{
+    prepareToolbar();
+    prepareActionConnections();
+    retranslateUi();
+}
+
+void UIFileManagerGuestTable::initGuestFileTable(const CGuestSession &session)
+{
+    if (!session.isOk())
+        return;
+    if (session.GetStatus() != KGuestSessionStatus_Started)
+        return;
+    m_comGuestSession = session;
+    initializeFileTree();
+}
+
+void UIFileManagerGuestTable::retranslateUi()
+{
+    if (m_pLocationLabel)
+        m_pLocationLabel->setText(UIFileManager::tr("Guest System"));
+    UIFileManagerTable::retranslateUi();
+}
+
+void UIFileManagerGuestTable::readDirectory(const QString& strPath,
+                                     UIFileTableItem *parent, bool isStartDir /*= false*/)
+
+{
+    if (!parent)
+        return;
+
+    CGuestDirectory directory;
+    QVector<KDirectoryOpenFlag> flag;
+    flag.push_back(KDirectoryOpenFlag_None);
+
+    directory = m_comGuestSession.DirectoryOpen(UIPathOperations::sanitize(strPath), /*aFilter*/ "", flag);
+    if (!m_comGuestSession.isOk())
+    {
+        emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
+        return;
+    }
+
+    parent->setIsOpened(true);
+    if (directory.isOk())
+    {
+        CFsObjInfo fsInfo = directory.Read();
+        QMap<QString, UIFileTableItem*> directories;
+        QMap<QString, UIFileTableItem*> files;
+
+        while (fsInfo.isOk())
+        {
+            QVector<QVariant> data;
+            QDateTime changeTime = QDateTime::fromMSecsSinceEpoch(fsInfo.GetChangeTime()/RT_NS_1MS);
+
+            data << fsInfo.GetName() << static_cast<qulonglong>(fsInfo.GetObjectSize())
+                 << changeTime << fsInfo.GetUserName() << permissionString(fsInfo);
+
+            FileObjectType fsObjectType = fileType(fsInfo);
+            UIFileTableItem *item = new UIFileTableItem(data, parent, fsObjectType);
+
+            if (!item)
+                continue;
+            item->setPath(UIPathOperations::mergePaths(strPath, fsInfo.GetName()));
+            if (fsObjectType == FileObjectType_Directory)
+            {
+                directories.insert(fsInfo.GetName(), item);
+                item->setIsOpened(false);
+            }
+            else if(fsObjectType == FileObjectType_File)
+            {
+                files.insert(fsInfo.GetName(), item);
+                item->setIsOpened(false);
+            }
+            else if(fsObjectType == FileObjectType_SymLink)
+            {
+                files.insert(fsInfo.GetName(), item);
+                item->setIsOpened(false);
+                /* @todo. We will need to wait a fully implemented SymlinkRead function
+                 * to be able to handle sym links properly: */
+                // QString path = UIPathOperations::mergePaths(strPath, fsInfo.GetName());
+                // QVector<KSymlinkReadFlag> aFlags;
+                // printf("%s %s %s\n", qPrintable(fsInfo.GetName()), qPrintable(path),
+                //        qPrintable(m_comGuestSession.SymlinkRead(path, aFlags)));
+            }
+
+            fsInfo = directory.Read();
+        }
+        insertItemsToTree(directories, parent, true, isStartDir);
+        insertItemsToTree(files, parent, false, isStartDir);
+    }
+    directory.Close();
+}
+
+void UIFileManagerGuestTable::deleteByItem(UIFileTableItem *item)
+{
+    if (!item)
+        return;
+    if (item->isUpDirectory())
+        return;
+    QVector<KDirectoryRemoveRecFlag> flags(KDirectoryRemoveRecFlag_ContentAndDir);
+
+    if (item->isDirectory())
+    {
+        m_comGuestSession.DirectoryRemoveRecursive(item->path(), flags);
+    }
+    else
+        m_comGuestSession.FsObjRemove(item->path());
+    if (!m_comGuestSession.isOk())
+    {
+        emit sigLogOutput(QString(item->path()).append(" could not be deleted"), FileManagerLogType_Error);
+        emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
+    }
+}
+
+void UIFileManagerGuestTable::deleteByPath(const QStringList &pathList)
+{
+    foreach (const QString &strPath, pathList)
+    {
+        CGuestFsObjInfo fileInfo = m_comGuestSession.FsObjQueryInfo(strPath, true);
+        FileObjectType eType = fileType(fileInfo);
+        if (eType == FileObjectType_File || eType == FileObjectType_SymLink)
+        {
+              m_comGuestSession.FsObjRemove(strPath);
+        }
+        else if (eType == FileObjectType_Directory)
+        {
+            QVector<KDirectoryRemoveRecFlag> flags(KDirectoryRemoveRecFlag_ContentAndDir);
+            m_comGuestSession.DirectoryRemoveRecursive(strPath, flags);
+        }
+
+    }
+}
+
+void UIFileManagerGuestTable::goToHomeDirectory()
+{
+    if (m_comGuestSession.isNull())
+        return;
+    if (!m_pRootItem || m_pRootItem->childCount() <= 0)
+        return;
+    UIFileTableItem *startDirItem = m_pRootItem->child(0);
+    if (!startDirItem)
+        return;
+
+    QString userHome = UIPathOperations::sanitize(m_comGuestSession.GetUserHome());
+    if (!m_comGuestSession.isOk())
+    {
+        emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
+        return;
+    }
+    QStringList pathList = userHome.split(UIPathOperations::delimiter, QString::SkipEmptyParts);
+    goIntoDirectory(UIPathOperations::pathTrail(userHome));
+}
+
+bool UIFileManagerGuestTable::renameItem(UIFileTableItem *item, QString newBaseName)
+{
+
+    if (!item || item->isUpDirectory() || newBaseName.isEmpty())
+        return false;
+    QString newPath = UIPathOperations::constructNewItemPath(item->path(), newBaseName);
+    QVector<KFsObjRenameFlag> aFlags(KFsObjRenameFlag_Replace);
+
+    m_comGuestSession.FsObjRename(item->path(), newPath, aFlags);
+    if (!m_comGuestSession.isOk())
+    {
+        emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
+        return false;
+    }
+
+    item->setPath(newPath);
+    return true;
+}
+
+bool UIFileManagerGuestTable::createDirectory(const QString &path, const QString &directoryName)
+{
+    QString newDirectoryPath = UIPathOperations::mergePaths(path, directoryName);
+    QVector<KDirectoryCreateFlag> flags(KDirectoryCreateFlag_None);
+
+    m_comGuestSession.DirectoryCreate(newDirectoryPath, 0/*aMode*/, flags);
+
+    if (!m_comGuestSession.isOk())
+    {
+        emit sigLogOutput(newDirectoryPath.append(" could not be created"), FileManagerLogType_Error);
+        emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
+        return false;
+    }
+    emit sigLogOutput(newDirectoryPath.append(" has been created"), FileManagerLogType_Info);
+    return true;
+}
+
+void UIFileManagerGuestTable::copyHostToGuest(const QStringList &hostSourcePathList,
+                                        const QString &strDestination /* = QString() */)
+{
+    if (!checkGuestSession())
+        return;
+    QVector<QString> sourcePaths = hostSourcePathList.toVector();
+    QVector<QString>  aFilters;
+    QVector<QString>  aFlags;
+    QString strDestinationPath = strDestination;
+    if (strDestinationPath.isEmpty())
+        strDestinationPath = currentDirectoryPath();
+
+    if (strDestinationPath.isEmpty())
+    {
+        emit sigLogOutput("No destination for copy operation", FileManagerLogType_Error);
+        return;
+    }
+    if (hostSourcePathList.empty())
+    {
+        emit sigLogOutput("No source for copy operation", FileManagerLogType_Error);
+        return;
+    }
+
+    CProgress progress = m_comGuestSession.CopyToGuest(sourcePaths, aFilters, aFlags, strDestinationPath);
+    if (!checkGuestSession())
+        return;
+    emit sigNewFileOperation(progress);
+}
+
+void UIFileManagerGuestTable::copyGuestToHost(const QString& hostDestinationPath)
+{
+    if (!checkGuestSession())
+        return;
+    QVector<QString> sourcePaths = selectedItemPathList().toVector();
+    QVector<QString>  aFilters;
+    QVector<QString>  aFlags;
+
+    if (hostDestinationPath.isEmpty())
+    {
+        emit sigLogOutput("No destination for copy operation", FileManagerLogType_Error);
+        return;
+    }
+    if (sourcePaths.empty())
+    {
+        emit sigLogOutput("No source for copy operation", FileManagerLogType_Error);
+        return;
+    }
+
+    CProgress progress = m_comGuestSession.CopyFromGuest(sourcePaths, aFilters, aFlags, hostDestinationPath);
+    if (!checkGuestSession())
+        return;
+    emit sigNewFileOperation(progress);
+}
+
+FileObjectType UIFileManagerGuestTable::fileType(const CFsObjInfo &fsInfo)
+{
+    if (fsInfo.isNull() || !fsInfo.isOk())
+        return FileObjectType_Unknown;
+    if (fsInfo.GetType() == KFsObjType_Directory)
+         return FileObjectType_Directory;
+    else if (fsInfo.GetType() == KFsObjType_File)
+        return FileObjectType_File;
+    else if (fsInfo.GetType() == KFsObjType_Symlink)
+        return FileObjectType_SymLink;
+
+    return FileObjectType_Other;
+}
+
+FileObjectType UIFileManagerGuestTable::fileType(const CGuestFsObjInfo &fsInfo)
+{
+    if (fsInfo.isNull() || !fsInfo.isOk())
+        return FileObjectType_Unknown;
+    if (fsInfo.GetType() == KFsObjType_Directory)
+         return FileObjectType_Directory;
+    else if (fsInfo.GetType() == KFsObjType_File)
+        return FileObjectType_File;
+    else if (fsInfo.GetType() == KFsObjType_Symlink)
+        return FileObjectType_SymLink;
+
+    return FileObjectType_Other;
+}
+
+
+QString UIFileManagerGuestTable::fsObjectPropertyString()
+{
+    QStringList selectedObjects = selectedItemPathList();
+    if (selectedObjects.isEmpty())
+        return QString();
+    if (selectedObjects.size() == 1)
+    {
+        if (selectedObjects.at(0).isNull())
+            return QString();
+
+        CGuestFsObjInfo fileInfo = m_comGuestSession.FsObjQueryInfo(selectedObjects.at(0), false /*aFollowSymlinks*/);
+        if (!m_comGuestSession.isOk())
+        {
+            emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
+            return QString();
+        }
+
+        QStringList propertyStringList;
+
+        /* Name: */
+        propertyStringList << QString("<b>Name:</b> %1<br/>").arg(UIPathOperations::getObjectName(fileInfo.GetName()));
+
+        /* Size: */
+        LONG64 size = fileInfo.GetObjectSize();
+        propertyStringList << UIFileManager::tr("<b>Size:</b> %1 bytes").arg(QString::number(size));
+        if (size >= UIFileManagerTable::m_iKiloByte)
+            propertyStringList << QString(" (%1)<br/>").arg(humanReadableSize(size));
+        else
+            propertyStringList << QString("<br/>");
+
+        /* Allocated size: */
+        size = fileInfo.GetAllocatedSize();
+        propertyStringList << UIFileManager::tr("<b>Allocated:</b> %1 bytes").arg(QString::number(size));
+        if (size >= UIFileManagerTable::m_iKiloByte)
+            propertyStringList << QString(" (%1)<br/>").arg(humanReadableSize(size));
+        else
+            propertyStringList << QString("<br/>");
+
+        /* Type: */
+        QString str;
+        KFsObjType const enmType = fileInfo.GetType();
+        switch (enmType)
+        {
+            case KFsObjType_Directory:  str = tr("directory"); break;
+            case KFsObjType_File:       str = tr("file"); break;
+            case KFsObjType_Symlink:    str = tr("symbolic link"); break;
+            case KFsObjType_DevChar:    str = tr("character device"); break;
+            case KFsObjType_DevBlock:   str = tr("block device"); break;
+            case KFsObjType_Fifo:       str = tr("fifo"); break;
+            case KFsObjType_Socket:     str = tr("socket"); break;
+            case KFsObjType_WhiteOut:   str = tr("whiteout"); break;
+            case KFsObjType_Unknown:    str = tr("unknown"); break;
+            default:                    str = tr("illegal-value"); break;
+        }
+        propertyStringList <<  UIFileManager::tr("<b>Type:</b> %1<br/>").arg(str);
+
+        /* INode number, device, link count: */
+        propertyStringList << UIFileManager::tr("<b>INode:</b> %1<br/>").arg(fileInfo.GetNodeId());
+        propertyStringList << UIFileManager::tr("<b>Device:</b> %1<br/>").arg(fileInfo.GetNodeIdDevice());  /** @todo hex */
+        propertyStringList << UIFileManager::tr("<b>Hardlinks:</b> %1<br/>").arg(fileInfo.GetHardLinks());
+
+        /* Attributes: */
+        str = fileInfo.GetFileAttributes();
+        if (!str.isEmpty())
+        {
+            int offSpace = str.indexOf(' ');
+            if (offSpace < 0)
+                offSpace = str.length();
+            propertyStringList << UIFileManager::tr("<b>Mode:</b> %1<br/>").arg(str.left(offSpace));
+            propertyStringList << UIFileManager::tr("<b>Attributes:</b> %1<br/>").arg(str.mid(offSpace + 1).trimmed());
+        }
+
+        /* Character/block device ID: */
+        ULONG uDeviceNo = fileInfo.GetDeviceNumber();
+        if (uDeviceNo != 0 || enmType == KFsObjType_DevChar || enmType == KFsObjType_DevBlock)
+            propertyStringList << UIFileManager::tr("<b>Device ID:</b> %1<br/>").arg(uDeviceNo); /** @todo hex */
+
+        /* Owner: */
+        propertyStringList << UIFileManager::tr("<b>Owner:</b> %1 (%2)<br/>").
+            arg(fileInfo.GetUserName()).arg(fileInfo.GetUID());
+        propertyStringList << UIFileManager::tr("<b>Group:</b> %1 (%2)<br/>").
+            arg(fileInfo.GetGroupName()).arg(fileInfo.GetGID());
+
+        /* Timestamps: */
+        propertyStringList << UIFileManager::tr("<b>Birth:</b> %1<br/>").
+            arg(QDateTime::fromMSecsSinceEpoch(fileInfo.GetBirthTime() / RT_NS_1MS).toString());
+        propertyStringList << UIFileManager::tr("<b>Change:</b> %1<br/>").
+            arg(QDateTime::fromMSecsSinceEpoch(fileInfo.GetChangeTime() / RT_NS_1MS).toString());
+        propertyStringList << UIFileManager::tr("<b>Modified:</b> %1<br/>").
+            arg(QDateTime::fromMSecsSinceEpoch(fileInfo.GetModificationTime() / RT_NS_1MS).toString());
+        propertyStringList << UIFileManager::tr("<b>Access:</b> %1<br/>").
+            arg(QDateTime::fromMSecsSinceEpoch(fileInfo.GetAccessTime() / RT_NS_1MS).toString());
+
+        /* Join the list elements into a single string seperated by empty string: */
+        return propertyStringList.join(QString());
+    }
+
+    int fileCount = 0;
+    int directoryCount = 0;
+    ULONG64 totalSize = 0;
+
+    for(int i = 0; i < selectedObjects.size(); ++i)
+    {
+        CGuestFsObjInfo fileInfo = m_comGuestSession.FsObjQueryInfo(selectedObjects.at(0), true);
+        if (!m_comGuestSession.isOk())
+        {
+            emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
+            continue;
+        }
+
+        FileObjectType type = fileType(fileInfo);
+
+        if (type == FileObjectType_File)
+            ++fileCount;
+        if (type == FileObjectType_Directory)
+            ++directoryCount;
+        totalSize += fileInfo.GetObjectSize();
+    }
+    QStringList propertyStringList;
+    propertyStringList << UIFileManager::tr("<b>Selected:</b> %1 files and %2 directories<br/>").
+        arg(QString::number(fileCount)).arg(QString::number(directoryCount));
+    propertyStringList << UIFileManager::tr("<b>Size (non-recursive):</b> %1 bytes").arg(QString::number(totalSize));
+    if (totalSize >= m_iKiloByte)
+        propertyStringList << QString(" (%1)").arg(humanReadableSize(totalSize));
+
+    return propertyStringList.join(QString());;
+}
+
+void UIFileManagerGuestTable::showProperties()
+{
+    if (m_comGuestSession.isNull())
+        return;
+    QString fsPropertyString = fsObjectPropertyString();
+    if (fsPropertyString.isEmpty())
+        return;
+
+    m_pPropertiesDialog = new UIPropertiesDialog();
+    if (!m_pPropertiesDialog)
+        return;
+
+    QStringList selectedObjects = selectedItemPathList();
+    if (selectedObjects.size() == 0)
+        return;
+    //UIGuestDirectoryDiskUsageComputer *directoryThread = 0;
+
+    /* if the selection include a directory or it is a multiple selection the create a worker thread
+       to compute total size of the selection (recusively) */
+    // bool createWorkerThread = (selectedObjects.size() > 1);
+    // if (!createWorkerThread &&
+    //     fileType(m_comGuestSession.FsObjQueryInfo(selectedObjects[0], true)) == FileObjectType_Directory)
+    //     createWorkerThread = true;
+    // if (createWorkerThread)
+    // {
+    //     directoryThread = new UIGuestDirectoryDiskUsageComputer(this, selectedObjects, m_comGuestSession);
+    //     if (directoryThread)
+    //     {
+    //         connect(directoryThread, &UIGuestDirectoryDiskUsageComputer::sigResultUpdated,
+    //                 this, &UIFileManagerGuestTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/);
+    //         directoryThread->start();
+    //     }
+    // }
+
+    m_pPropertiesDialog->setWindowTitle(UIFileManager::tr("Properties"));
+    m_pPropertiesDialog->setPropertyText(fsPropertyString);
+    m_pPropertiesDialog->execute();
+
+    // if (directoryThread)
+    // {
+    //     if (directoryThread->isRunning())
+    //         directoryThread->stopRecursion();
+    //     disconnect(directoryThread, &UIGuestDirectoryDiskUsageComputer::sigResultUpdated,
+    //                this, &UIFileManagerGuestTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/);
+    // }
+
+
+    delete m_pPropertiesDialog;
+    m_pPropertiesDialog = 0;
+
+}
+
+void UIFileManagerGuestTable::determineDriveLetters()
+{
+    if (m_comGuestSession.isNull())
+        return;
+    KPathStyle pathStyle = m_comGuestSession.GetPathStyle();
+    if (pathStyle != KPathStyle_DOS)
+        return;
+
+    /** @todo Currently API lacks a way to query windows drive letters.
+     *  so we enumarate them by using CGuestSession::DirectoryExists() */
+    m_driveLetterList.clear();
+    for (int i = 'A'; i <= 'Z'; ++i)
+    {
+        QString path((char)i);
+        path += ":/";
+        bool exists = m_comGuestSession.DirectoryExists(path, false /* aFollowSymlinks */);
+        if (exists)
+            m_driveLetterList.push_back(path);
+    }
+}
+
+void UIFileManagerGuestTable::prepareToolbar()
+{
+    if (m_pToolBar && m_pActionPool)
+    {
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_GoUp));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_GoHome));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Refresh));
+        m_pToolBar->addSeparator();
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Delete));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Rename));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_CreateNewDirectory));
+
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Copy));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Cut));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Paste));
+        m_pToolBar->addSeparator();
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_SelectAll));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_InvertSelection));
+        m_pToolBar->addSeparator();
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_ShowProperties));
+        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Delete));
+        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Rename));
+        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Copy));
+        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Cut));
+        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_ShowProperties));
+
+        /* Hide these actions for now until we have a suitable guest-to-guest copy function: */
+        m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Copy)->setVisible(false);
+        m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Cut)->setVisible(false);
+        m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Paste)->setVisible(false);
+    }
+    setSelectionDependentActionsEnabled(false);
+    setPasteActionEnabled(false);
+}
+
+void UIFileManagerGuestTable::createFileViewContextMenu(const QWidget *pWidget, const QPoint &point)
+{
+    if (!pWidget)
+        return;
+
+    QMenu menu;
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_GoUp));
+
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_GoHome));
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Refresh));
+    menu.addSeparator();
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Delete));
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Rename));
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_CreateNewDirectory));
+    menu.addSeparator();
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Copy));
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Cut));
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Paste));
+    menu.addSeparator();
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_SelectAll));
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_InvertSelection));
+    menu.addSeparator();
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_ShowProperties));
+    menu.exec(pWidget->mapToGlobal(point));
+}
+
+void UIFileManagerGuestTable::setPasteActionEnabled(bool fEnabled)
+{
+    m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Paste)->setEnabled(fEnabled);
+}
+
+void UIFileManagerGuestTable::pasteCutCopiedObjects()
+{
+    /** Wait until we have a API function that would take multiple source objects
+     *  and return a single IProgress instance: */
+    // QVector<KFileCopyFlag> fileCopyFlags;
+    // QVector<KDirectoryCopyFlag> directoryCopyFlags;
+
+    // foreach (const QString &strPath, m_copyCutBuffer)
+    // {
+
+    // }
+}
+
+
+void UIFileManagerGuestTable::prepareActionConnections()
+{
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_GoUp), &QAction::triggered,
+            this, &UIFileManagerTable::sltGoUp);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_GoHome), &QAction::triggered,
+            this, &UIFileManagerTable::sltGoHome);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Refresh), &QAction::triggered,
+            this, &UIFileManagerTable::sltRefresh);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Delete), &QAction::triggered,
+            this, &UIFileManagerTable::sltDelete);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Rename), &QAction::triggered,
+            this, &UIFileManagerTable::sltRename);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Copy), &QAction::triggered,
+            this, &UIFileManagerTable::sltCopy);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Cut), &QAction::triggered,
+            this, &UIFileManagerTable::sltCut);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_Paste), &QAction::triggered,
+            this, &UIFileManagerTable::sltPaste);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_SelectAll), &QAction::triggered,
+            this, &UIFileManagerTable::sltSelectAll);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_InvertSelection), &QAction::triggered,
+            this, &UIFileManagerTable::sltInvertSelection);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_ShowProperties), &QAction::triggered,
+            this, &UIFileManagerTable::sltShowProperties);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Guest_CreateNewDirectory), &QAction::triggered,
+            this, &UIFileManagerTable::sltCreateNewDirectory);
+}
+
+bool UIFileManagerGuestTable::checkGuestSession()
+{
+    if (!m_comGuestSession.isOk())
+    {
+        emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
+        return false;
+    }
+    return true;
+}
+
+QString UIFileManagerGuestTable::permissionString(const CFsObjInfo &fsInfo)
+{
+    /* Attributes: */
+    QString strAttributes = fsInfo.GetFileAttributes();
+
+    if (strAttributes.isEmpty())
+        return strAttributes;
+
+    int offSpace = strAttributes.indexOf(' ');
+    if (offSpace < 0)
+        offSpace = strAttributes.length();
+    return strAttributes.left(offSpace);
+}
+
+#include "UIFileManagerGuestTable.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerGuestTable.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerGuestTable.h	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerGuestTable.h	(revision 76177)
@@ -0,0 +1,84 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIFileManagerGuestTable class declaration.
+ */
+
+/*
+ * Copyright (C) 2016-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIGuestTable_h___
+#define ___UIGuestTable_h___
+
+/* Qt includes: */
+# include <QUuid>
+
+/* COM includes: */
+#include "COMEnums.h"
+#include "CGuestSession.h"
+
+/* GUI includes: */
+#include "UIFileManagerTable.h"
+
+/* Forward declarations: */
+class UIActionPool;
+
+/** This class scans the guest file system by using the VBox Guest Control API
+ *  and populates the UIGuestControlFileModel*/
+class UIFileManagerGuestTable : public UIFileManagerTable
+{
+    Q_OBJECT;
+
+public:
+
+    UIFileManagerGuestTable(UIActionPool *pActionPool, QWidget *pParent = 0);
+    void initGuestFileTable(const CGuestSession &session);
+    void copyGuestToHost(const QString& hostDestinationPath);
+    void copyHostToGuest(const QStringList &hostSourcePathList,
+                         const QString &strDestination = QString());
+
+signals:
+
+    void sigNewFileOperation(const CProgress &comProgress);
+
+protected:
+
+    void            retranslateUi() /* override */;
+    virtual void    readDirectory(const QString& strPath, UIFileTableItem *parent, bool isStartDir = false) /* override */;
+    virtual void    deleteByItem(UIFileTableItem *item) /* override */;
+    virtual void    deleteByPath(const QStringList &pathList) /* override */;
+    virtual void    goToHomeDirectory() /* override */;
+    virtual bool    renameItem(UIFileTableItem *item, QString newBaseName);
+    virtual bool    createDirectory(const QString &path, const QString &directoryName);
+    virtual QString fsObjectPropertyString() /* override */;
+    virtual void    showProperties() /* override */;
+    virtual void    determineDriveLetters() /* override */;
+    virtual void    prepareToolbar() /* override */;
+    virtual void    createFileViewContextMenu(const QWidget *pWidget, const QPoint &point) /* override */;
+    /** @name Copy/Cut guest-to-guest stuff.
+     * @{ */
+        /** Disable/enable paste action depending on the m_eFileOperationType. */
+        virtual void  setPasteActionEnabled(bool fEnabled) /* override */;
+        virtual void  pasteCutCopiedObjects() /* override */;
+    /** @} */
+
+private:
+
+    FileObjectType  fileType(const CFsObjInfo &fsInfo);
+    FileObjectType  fileType(const CGuestFsObjInfo &fsInfo);
+
+    void prepareActionConnections();
+    bool checkGuestSession();
+    QString permissionString(const CFsObjInfo &fsInfo);
+    mutable CGuestSession     m_comGuestSession;
+};
+
+#endif /* !___UIFileManagerGuestTable_h___ */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerHostTable.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerHostTable.cpp	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerHostTable.cpp	(revision 76177)
@@ -0,0 +1,533 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIFileManagerHostTable class implementation.
+ */
+
+/*
+ * Copyright (C) 2016-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QAction>
+# include <QDateTime>
+# include <QDir>
+
+/* GUI includes: */
+# include "QILabel.h"
+# include "UIActionPool.h"
+# include "UIFileManager.h"
+# include "UIFileManagerModel.h"
+# include "UIFileManagerHostTable.h"
+# include "UIToolBar.h"
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+/*********************************************************************************************************************************
+*   UIHostDirectoryDiskUsageComputer definition.                                                                                 *
+*********************************************************************************************************************************/
+
+/** Open directories recursively and sum the disk usage. Don't block the GUI thread while doing this */
+class UIHostDirectoryDiskUsageComputer : public UIDirectoryDiskUsageComputer
+{
+    Q_OBJECT;
+
+public:
+
+    UIHostDirectoryDiskUsageComputer(QObject *parent, QStringList strStartPath);
+
+protected:
+
+    virtual void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics) /* override */;
+};
+
+
+/*********************************************************************************************************************************
+*   UIHostDirectoryDiskUsageComputer implementation.                                                                             *
+*********************************************************************************************************************************/
+
+UIHostDirectoryDiskUsageComputer::UIHostDirectoryDiskUsageComputer(QObject *parent, QStringList pathList)
+    :UIDirectoryDiskUsageComputer(parent, pathList)
+{
+}
+
+void UIHostDirectoryDiskUsageComputer::directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics)
+{
+    /* Prevent modification of the continue flag while reading: */
+    m_mutex.lock();
+    /* Check if m_fOkToContinue is set to false. if so just end recursion: */
+    if (!isOkToContinue())
+    {
+        m_mutex.unlock();
+        return;
+    }
+    m_mutex.unlock();
+
+    QFileInfo fileInfo(path);
+    if (!fileInfo.exists())
+        return;
+    /* if the object is a file or a symlink then read the size and return: */
+    if (fileInfo.isFile())
+    {
+        statistics.m_totalSize += fileInfo.size();
+        ++statistics.m_uFileCount;
+        sigResultUpdated(statistics);
+        return;
+    }
+    else if (fileInfo.isSymLink())
+    {
+        statistics.m_totalSize += fileInfo.size();
+        ++statistics.m_uSymlinkCount;
+        sigResultUpdated(statistics);
+        return;
+    }
+
+    /* if it is a directory then read the content: */
+    QDir dir(path);
+    if (!dir.exists())
+        return;
+
+    QFileInfoList entryList = dir.entryInfoList();
+    for (int i = 0; i < entryList.size(); ++i)
+    {
+        const QFileInfo &entryInfo = entryList.at(i);
+        if (entryInfo.baseName().isEmpty() || entryInfo.baseName() == "." ||
+            entryInfo.baseName() == UIFileManagerModel::strUpDirectoryString)
+            continue;
+        statistics.m_totalSize += entryInfo.size();
+        if (entryInfo.isSymLink())
+            statistics.m_uSymlinkCount++;
+        else if(entryInfo.isFile())
+            statistics.m_uFileCount++;
+        else if (entryInfo.isDir())
+        {
+            statistics.m_uDirectoryCount++;
+            directoryStatisticsRecursive(entryInfo.absoluteFilePath(), statistics);
+        }
+    }
+    sigResultUpdated(statistics);
+}
+
+
+/*********************************************************************************************************************************
+*   UIFileManagerHostTable implementation.                                                                                       *
+*********************************************************************************************************************************/
+
+UIFileManagerHostTable::UIFileManagerHostTable(UIActionPool *pActionPool, QWidget *pParent /* = 0 */)
+    :UIFileManagerTable(pActionPool, pParent)
+{
+    initializeFileTree();
+    prepareToolbar();
+    prepareActionConnections();
+    retranslateUi();
+}
+
+void UIFileManagerHostTable::retranslateUi()
+{
+    if (m_pLocationLabel)
+        m_pLocationLabel->setText(UIFileManager::tr("Host System"));
+    UIFileManagerTable::retranslateUi();
+}
+
+void UIFileManagerHostTable::prepareToolbar()
+{
+    if (m_pToolBar && m_pActionPool)
+    {
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_GoUp));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_GoHome));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Refresh));
+        m_pToolBar->addSeparator();
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Delete));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Rename));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_CreateNewDirectory));
+        /* Hide cut, copy, and paste for now. We will implement those
+           when we have an API for host file operations: */
+        // m_pToolBar->addSeparator();
+        // m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Copy));
+        // m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Cut));
+        // m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Paste));
+        m_pToolBar->addSeparator();
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_SelectAll));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_InvertSelection));
+        m_pToolBar->addSeparator();
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_ShowProperties));
+
+        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Delete));
+        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Rename));
+        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_ShowProperties));
+    }
+
+    setSelectionDependentActionsEnabled(false);
+}
+
+void UIFileManagerHostTable::createFileViewContextMenu(const QWidget *pWidget, const QPoint &point)
+{
+    if (!pWidget)
+        return;
+
+    QMenu menu;
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_GoUp));
+
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_GoHome));
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Refresh));
+    menu.addSeparator();
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Delete));
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Rename));
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_CreateNewDirectory));
+    /* Hide cut, copy, and paste for now. We will implement those
+       when we have an API for host file operations: */
+    // menu.addSeparator();
+    // menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Copy));
+    // menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Cut));
+    // menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Paste));
+    menu.addSeparator();
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_SelectAll));
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_InvertSelection));
+    menu.addSeparator();
+    menu.addAction(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_ShowProperties));
+    menu.exec(pWidget->mapToGlobal(point));
+}
+
+void UIFileManagerHostTable::readDirectory(const QString& strPath, UIFileTableItem *parent, bool isStartDir /*= false*/)
+{
+    if (!parent)
+        return;
+
+    QDir directory(strPath);
+    //directory.setFilter(QDir::NoDotAndDotDot);
+    parent->setIsOpened(true);
+    if (!directory.exists())
+        return;
+    QFileInfoList entries = directory.entryInfoList();
+    QMap<QString, UIFileTableItem*> directories;
+    QMap<QString, UIFileTableItem*> files;
+
+    for (int i = 0; i < entries.size(); ++i)
+    {
+
+        const QFileInfo &fileInfo = entries.at(i);
+        UIFileTableItem *item = new UIFileTableItem(createTreeItemData(fileInfo.fileName(), fileInfo.size(),
+                                                                       fileInfo.lastModified(), fileInfo.owner(),
+                                                                       permissionString(fileInfo.permissions())),
+                                                    parent, fileType(fileInfo));
+        if (!item)
+            continue;
+        item->setPath(fileInfo.absoluteFilePath());
+        /* if the item is a symlink set the target path and
+           check the target if it is a directory: */
+        if (fileInfo.isSymLink()) /** @todo No symlinks here on windows, while fsObjectPropertyString() does see them.  RTDirReadEx works wrt symlinks, btw. */
+        {
+            item->setTargetPath(fileInfo.symLinkTarget());
+            item->setIsSymLinkToADirectory(QFileInfo(fileInfo.symLinkTarget()).isDir());
+        }
+        if (fileInfo.isDir())
+        {
+            directories.insert(fileInfo.fileName(), item);
+            item->setIsOpened(false);
+        }
+        else
+        {
+            files.insert(fileInfo.fileName(), item);
+            item->setIsOpened(false);
+        }
+    }
+    insertItemsToTree(directories, parent, true, isStartDir);
+    insertItemsToTree(files, parent, false, isStartDir);
+    //updateCurrentLocationEdit(strPath);
+}
+
+void UIFileManagerHostTable::deleteByItem(UIFileTableItem *item)
+{
+    if (item->isUpDirectory())
+        return;
+    if (!item->isDirectory())
+    {
+        QDir itemToDelete;
+        itemToDelete.remove(item->path());
+    }
+    QDir itemToDelete(item->path());
+    itemToDelete.setFilter(QDir::NoDotAndDotDot);
+    /* Try to delete item recursively (in case of directories).
+       note that this is no good way of deleting big directory
+       trees. We need a better error reporting and a kind of progress
+       indicator: */
+    /** @todo replace this recursive delete by a better implementation: */
+    bool deleteSuccess = itemToDelete.removeRecursively();
+
+     if (!deleteSuccess)
+         emit sigLogOutput(QString(item->path()).append(" could not be deleted"), FileManagerLogType_Error);
+}
+
+void UIFileManagerHostTable::deleteByPath(const QStringList &pathList)
+{
+    foreach (const QString &strPath, pathList)
+    {
+        bool deleteSuccess = true;
+        FileObjectType eType = fileType(QFileInfo(strPath));
+        if (eType == FileObjectType_File || eType == FileObjectType_SymLink)
+        {
+            deleteSuccess = QDir().remove(strPath);
+        }
+        else if (eType == FileObjectType_Directory)
+        {
+            QDir itemToDelete(strPath);
+            itemToDelete.setFilter(QDir::NoDotAndDotDot);
+            deleteSuccess = itemToDelete.removeRecursively();
+        }
+        if (!deleteSuccess)
+            emit sigLogOutput(QString(strPath).append(" could not be deleted"), FileManagerLogType_Error);
+    }
+}
+
+void UIFileManagerHostTable::goToHomeDirectory()
+{
+    if (!m_pRootItem || m_pRootItem->childCount() <= 0)
+        return;
+    UIFileTableItem *startDirItem = m_pRootItem->child(0);
+    if (!startDirItem)
+        return;
+
+    QString userHome = UIPathOperations::sanitize(QDir::homePath());
+    goIntoDirectory(UIPathOperations::pathTrail(userHome));
+}
+
+bool UIFileManagerHostTable::renameItem(UIFileTableItem *item, QString newBaseName)
+{
+    if (!item || item->isUpDirectory() || newBaseName.isEmpty())
+        return false;
+    QString newPath = UIPathOperations::constructNewItemPath(item->path(), newBaseName);
+    QDir tempDir;
+    if (tempDir.rename(item->path(), newPath))
+    {
+        item->setPath(newPath);
+        return true;
+    }
+    return false;
+}
+
+bool UIFileManagerHostTable::createDirectory(const QString &path, const QString &directoryName)
+{
+    QDir parentDir(path);
+    if (!parentDir.mkdir(directoryName))
+    {
+        emit sigLogOutput(UIPathOperations::mergePaths(path, directoryName).append(" could not be created"), FileManagerLogType_Error);
+        return false;
+    }
+
+    return true;
+}
+
+FileObjectType UIFileManagerHostTable::fileType(const QFileInfo &fsInfo)
+{
+    if (!fsInfo.exists())
+        return FileObjectType_Unknown;
+    /* first check if it is symlink becacuse for Qt
+       being smylin and directory/file is not mutually exclusive: */
+    if (fsInfo.isSymLink())
+        return FileObjectType_SymLink;
+    else if (fsInfo.isFile())
+        return FileObjectType_File;
+    else if (fsInfo.isDir())
+        return FileObjectType_Directory;
+
+    return FileObjectType_Other;
+}
+
+QString UIFileManagerHostTable::fsObjectPropertyString()
+{
+    QStringList selectedObjects = selectedItemPathList();
+    if (selectedObjects.isEmpty())
+        return QString();
+    if (selectedObjects.size() == 1)
+    {
+        if (selectedObjects.at(0).isNull())
+            return QString();
+        QFileInfo fileInfo(selectedObjects.at(0));
+        if (!fileInfo.exists())
+            return QString();
+        QStringList propertyStringList;
+        /* Name: */
+        propertyStringList << UIFileManager::tr("<b>Name:</b> %1<br/>").arg(fileInfo.fileName());
+        /* Size: */
+        propertyStringList << UIFileManager::tr("<b>Size:</b> %1 bytes").arg(QString::number(fileInfo.size()));
+        if (fileInfo.size() >= m_iKiloByte)
+            propertyStringList << QString(" (%1)").arg(humanReadableSize(fileInfo.size()));
+        propertyStringList << "<br/>";
+        /* Type: */
+        propertyStringList << UIFileManager::tr("<b>Type:</b> %1<br/>").arg(fileTypeString(fileType(fileInfo)));
+        /* Creation Date: */
+        propertyStringList << UIFileManager::tr("<b>Created:</b> %1<br/>").arg(fileInfo.created().toString());
+        /* Last Modification Date: */
+        propertyStringList << UIFileManager::tr("<b>Modified:</b> %1<br/>").arg(fileInfo.lastModified().toString());
+        /* Owner: */
+        propertyStringList << UIFileManager::tr("<b>Owner:</b> %1").arg(fileInfo.owner());
+
+        return propertyStringList.join(QString());;
+    }
+
+    int fileCount = 0;
+    int directoryCount = 0;
+    ULONG64 totalSize = 0;
+
+    for(int i = 0; i < selectedObjects.size(); ++i)
+    {
+        QFileInfo fileInfo(selectedObjects.at(i));
+        if (!fileInfo.exists())
+            continue;
+        if (fileInfo.isFile())
+            ++fileCount;
+        if (fileInfo.isDir())
+            ++directoryCount;
+        totalSize += fileInfo.size();
+    }
+    QStringList propertyStringList;
+    propertyStringList << UIFileManager::tr("<b>Selected:</b> %1 files and %2 directories<br/>").
+        arg(QString::number(fileCount)).arg(QString::number(directoryCount));
+    propertyStringList << UIFileManager::tr("<b>Size:</b> %1 bytes").arg(QString::number(totalSize));
+    if (totalSize >= m_iKiloByte)
+        propertyStringList << QString(" (%1)").arg(humanReadableSize(totalSize));
+
+    return propertyStringList.join(QString());
+}
+
+void  UIFileManagerHostTable::showProperties()
+{
+    qRegisterMetaType<UIDirectoryStatistics>();
+    QString fsPropertyString = fsObjectPropertyString();
+    if (fsPropertyString.isEmpty())
+        return;
+    if (!m_pPropertiesDialog)
+        m_pPropertiesDialog = new UIPropertiesDialog(this);
+    if (!m_pPropertiesDialog)
+        return;
+
+    UIHostDirectoryDiskUsageComputer *directoryThread = 0;
+
+    QStringList selectedObjects = selectedItemPathList();
+    if ((selectedObjects.size() == 1 && QFileInfo(selectedObjects.at(0)).isDir())
+        || selectedObjects.size() > 1)
+    {
+        directoryThread = new UIHostDirectoryDiskUsageComputer(this, selectedObjects);
+        if (directoryThread)
+        {
+            connect(directoryThread, &UIHostDirectoryDiskUsageComputer::sigResultUpdated,
+                    this, &UIFileManagerHostTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/);
+            directoryThread->start();
+        }
+    }
+    m_pPropertiesDialog->setWindowTitle("Properties");
+    m_pPropertiesDialog->setPropertyText(fsPropertyString);
+    m_pPropertiesDialog->execute();
+    if (directoryThread)
+    {
+        if (directoryThread->isRunning())
+            directoryThread->stopRecursion();
+        disconnect(directoryThread, &UIHostDirectoryDiskUsageComputer::sigResultUpdated,
+                this, &UIFileManagerHostTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/);
+        directoryThread->wait();
+    }
+}
+
+void UIFileManagerHostTable::determineDriveLetters()
+{
+    QFileInfoList drive = QDir::drives();
+    m_driveLetterList.clear();
+    for (int i = 0; i < drive.size(); ++i)
+    {
+        if (UIPathOperations::doesPathStartWithDriveLetter(drive[i].filePath()))
+            m_driveLetterList.push_back(drive[i].filePath());
+
+    }
+}
+
+QString UIFileManagerHostTable::permissionString(QFileDevice::Permissions permissions)
+{
+    QString strPermissions;
+    if (permissions & QFileDevice::ReadOwner)
+        strPermissions += 'r';
+    else
+        strPermissions += '-';
+
+    if (permissions & QFileDevice::WriteOwner)
+        strPermissions += 'w';
+    else
+        strPermissions += '-';
+
+    if (permissions & QFileDevice::ExeOwner)
+        strPermissions += 'x';
+    else
+        strPermissions += '-';
+
+    if (permissions & QFileDevice::ReadGroup)
+        strPermissions += 'r';
+    else
+        strPermissions += '-';
+
+    if (permissions & QFileDevice::WriteGroup)
+        strPermissions += 'w';
+    else
+        strPermissions += '-';
+
+    if (permissions & QFileDevice::ExeGroup)
+        strPermissions += 'x';
+    else
+        strPermissions += '-';
+
+    if (permissions & QFileDevice::ReadOther)
+        strPermissions += 'r';
+    else
+        strPermissions += '-';
+
+    if (permissions & QFileDevice::WriteOther)
+        strPermissions += 'w';
+    else
+        strPermissions += '-';
+
+    if (permissions & QFileDevice::ExeOther)
+        strPermissions += 'x';
+    else
+        strPermissions += '-';
+    return strPermissions;
+}
+
+void UIFileManagerHostTable::prepareActionConnections()
+{
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_GoUp), &QAction::triggered,
+            this, &UIFileManagerTable::sltGoUp);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_GoHome), &QAction::triggered,
+            this, &UIFileManagerTable::sltGoHome);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Refresh), &QAction::triggered,
+            this, &UIFileManagerTable::sltRefresh);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Delete), &QAction::triggered,
+            this, &UIFileManagerTable::sltDelete);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Rename), &QAction::triggered,
+            this, &UIFileManagerTable::sltRename);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Copy), &QAction::triggered,
+            this, &UIFileManagerTable::sltCopy);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Cut), &QAction::triggered,
+            this, &UIFileManagerTable::sltCut);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_Paste), &QAction::triggered,
+            this, &UIFileManagerTable::sltPaste);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_SelectAll), &QAction::triggered,
+            this, &UIFileManagerTable::sltSelectAll);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_InvertSelection), &QAction::triggered,
+            this, &UIFileManagerTable::sltInvertSelection);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_ShowProperties), &QAction::triggered,
+            this, &UIFileManagerTable::sltShowProperties);
+    connect(m_pActionPool->action(UIActionIndex_M_FileManager_S_Host_CreateNewDirectory), &QAction::triggered,
+            this, &UIFileManagerTable::sltCreateNewDirectory);
+}
+
+#include "UIFileManagerHostTable.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerHostTable.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerHostTable.h	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerHostTable.h	(revision 76177)
@@ -0,0 +1,66 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIFileManagerHostTable class declaration.
+ */
+
+/*
+ * Copyright (C) 2016-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIFileManagerHostTable_h___
+#define ___UIFileManagerHostTable_h___
+
+/* GUI includes: */
+#include "UIFileManagerTable.h"
+
+/* Forward declarations: */
+class UIActionPool;
+
+/** This class scans the host file system by using the Qt API
+    and connects to the UIFileManagerModel*/
+class UIFileManagerHostTable : public UIFileManagerTable
+{
+    Q_OBJECT;
+
+public:
+
+    UIFileManagerHostTable(UIActionPool *pActionPool, QWidget *pParent = 0);
+
+protected:
+
+    FileObjectType  fileType(const QFileInfo &fsInfo);
+    void            retranslateUi() /* override */;
+    virtual void    readDirectory(const QString& strPath, UIFileTableItem *parent, bool isStartDir = false) /* override */;
+    virtual void    deleteByItem(UIFileTableItem *item) /* override */;
+    virtual void    deleteByPath(const QStringList &pathList) /* override */;
+    virtual void    goToHomeDirectory() /* override */;
+    virtual bool    renameItem(UIFileTableItem *item, QString newBaseName);
+    virtual bool    createDirectory(const QString &path, const QString &directoryName);
+    virtual QString fsObjectPropertyString() /* override */;
+    virtual void    showProperties() /* override */;
+    virtual void    determineDriveLetters() /* override */;
+    virtual void    prepareToolbar() /* override */;
+    virtual void    createFileViewContextMenu(const QWidget *pWidget, const QPoint &point) /* override */;
+    /** @name Copy/Cut host-to-host stuff. Currently not implemented.
+     * @{ */
+        /** Disable/enable paste action depending on the m_eFileOperationType. */
+        virtual void  setPasteActionEnabled(bool) /* override */{}
+        virtual void  pasteCutCopiedObjects() /* override */{}
+    /** @} */
+
+private:
+
+    QString permissionString(QFileDevice::Permissions permissions);
+    void    prepareActionConnections();
+
+};
+
+#endif /* !___UIFileManagerHostTable_h___ */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerLogPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerLogPanel.cpp	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerLogPanel.cpp	(revision 76177)
@@ -0,0 +1,138 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVMLogViewer class implementation.
+ */
+
+/*
+ * Copyright (C) 2010-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QHBoxLayout>
+# include <QMenu>
+# include <QSpinBox>
+# include <QTextEdit>
+# include <QTime>
+
+/* GUI includes: */
+# include "QIToolButton.h"
+# include "UIIconPool.h"
+# include "UIFileManager.h"
+# include "UIFileManagerLogPanel.h"
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+/*********************************************************************************************************************************
+*   UIFileManagerLogViewer definition.                                                                                   *
+*********************************************************************************************************************************/
+
+class UIFileManagerLogViewer : public QTextEdit
+{
+
+    Q_OBJECT;
+
+public:
+
+    UIFileManagerLogViewer(QWidget *pParent = 0);
+
+protected:
+
+    virtual void contextMenuEvent(QContextMenuEvent * event) /* override */;
+
+private slots:
+
+    void sltClear();
+};
+
+/*********************************************************************************************************************************
+*   UIFileManagerLogViewer implementation.                                                                                   *
+*********************************************************************************************************************************/
+
+UIFileManagerLogViewer::UIFileManagerLogViewer(QWidget *pParent /* = 0 */)
+    :QTextEdit(pParent)
+{
+    setUndoRedoEnabled(false);
+    setReadOnly(true);
+}
+
+void UIFileManagerLogViewer::contextMenuEvent(QContextMenuEvent *event)
+{
+    QMenu *menu = createStandardContextMenu();
+
+    QAction *pClearAction = menu->addAction(UIFileManager::tr("Clear"));
+    connect(pClearAction, &QAction::triggered, this, &UIFileManagerLogViewer::sltClear);
+    menu->exec(event->globalPos());
+    delete menu;
+}
+
+void UIFileManagerLogViewer::sltClear()
+{
+    clear();
+}
+
+
+/*********************************************************************************************************************************
+*   UIFileManagerLogPanel implementation.                                                                            *
+*********************************************************************************************************************************/
+
+UIFileManagerLogPanel::UIFileManagerLogPanel(UIFileManager *pManagerWidget, QWidget *pParent)
+    : UIFileManagerPanel(pManagerWidget, pParent)
+    , m_pLogTextEdit(0)
+{
+    prepare();
+}
+
+void UIFileManagerLogPanel::appendLog(const QString &strLog, FileManagerLogType eLogType)
+{
+    if (!m_pLogTextEdit)
+        return;
+    QString strColorTag("<font color=\"Black\">");
+    if (eLogType == FileManagerLogType_Error)
+    {
+        strColorTag = "<font color=\"Red\">";
+    }
+    QString strColoredLog = QString("%1 %2: %3 %4").arg(strColorTag).arg(QTime::currentTime().toString("hh:mm:ss")).arg(strLog).arg("</font>");
+    m_pLogTextEdit->append(strColoredLog);
+}
+
+QString UIFileManagerLogPanel::panelName() const
+{
+    return "LogPanel";
+}
+
+void UIFileManagerLogPanel::prepareWidgets()
+{
+    if (!mainLayout())
+        return;
+    m_pLogTextEdit = new UIFileManagerLogViewer;
+    if (m_pLogTextEdit)
+    {
+        mainLayout()->addWidget(m_pLogTextEdit);
+    }
+}
+
+void UIFileManagerLogPanel::prepareConnections()
+{
+}
+
+void UIFileManagerLogPanel::retranslateUi()
+{
+    UIFileManagerPanel::retranslateUi();
+
+}
+
+
+#include "UIFileManagerLogPanel.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerLogPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerLogPanel.h	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerLogPanel.h	(revision 76177)
@@ -0,0 +1,56 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVMLogViewer class declaration.
+ */
+
+/*
+ * Copyright (C) 2010-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIFileManagerLogPanel_h___
+#define ___UIFileManagerLogPanel_h___
+
+/* GUI includes: */
+#include "UIGuestControlDefs.h"
+#include "UIFileManagerPanel.h"
+
+/* Forward declarations: */
+class QTextEdit;
+class UIFileManager;
+
+/** UIFileManagerPanel extension to display file manager logs. */
+class UIFileManagerLogPanel : public UIFileManagerPanel
+{
+    Q_OBJECT;
+
+public:
+
+    UIFileManagerLogPanel(UIFileManager *pManagerWidget, QWidget *pParent);
+    void appendLog(const QString &str, FileManagerLogType);
+    virtual QString panelName() const /* override */;
+
+protected:
+
+    virtual void prepareWidgets() /* override */;
+    virtual void prepareConnections() /* override */;
+
+    /** Handles the translation event. */
+    void retranslateUi();
+
+private slots:
+
+
+private:
+
+    QTextEdit *m_pLogTextEdit;
+};
+
+#endif /* !___UIFileManagerLogPanel_h___ */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerModel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerModel.cpp	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerModel.cpp	(revision 76177)
@@ -0,0 +1,306 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIFileManagerModel class implementation.
+ */
+
+/*
+ * Copyright (C) 2016-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QDateTime>
+# include <QHeaderView>
+
+/* GUI includes: */
+# include "UIErrorString.h"
+# include "UIFileManagerModel.h"
+# include "UIFileManagerTable.h"
+# include "UIFileManager.h"
+
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+const char* UIFileManagerModel::strUpDirectoryString = "..";
+
+UIGuestControlFileProxyModel::UIGuestControlFileProxyModel(QObject *parent /* = 0 */)
+    :QSortFilterProxyModel(parent)
+{
+}
+
+bool UIGuestControlFileProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
+{
+    UIFileTableItem *pLeftItem = static_cast<UIFileTableItem*>(left.internalPointer());
+    UIFileTableItem *pRightItem = static_cast<UIFileTableItem*>(right.internalPointer());
+
+    UIFileManagerOptions *pOptions = UIFileManagerOptions::instance();
+
+    if (pLeftItem && pRightItem)
+    {
+        /* List the directories before the files if options say so: */
+        if (pOptions && pOptions->bListDirectoriesOnTop)
+        {
+            if ((pLeftItem->isDirectory() || pLeftItem->isSymLinkToADirectory()) && !pRightItem->isDirectory())
+                return (sortOrder() == Qt::AscendingOrder);
+            if ((pRightItem->isDirectory() || pRightItem->isSymLinkToADirectory()) && !pLeftItem->isDirectory())
+                return (sortOrder() == Qt::DescendingOrder);
+        }
+        /* Up directory item should be always the first item: */
+        if (pLeftItem->isUpDirectory())
+            return (sortOrder() == Qt::AscendingOrder);
+        else if (pRightItem->isUpDirectory())
+            return (sortOrder() == Qt::DescendingOrder);
+
+        /* If the sort column is QDateTime than handle it correctly: */
+        if (sortColumn() == UIFileManagerModelColumn_ChangeTime)
+        {
+            QVariant dataLeft = pLeftItem->data(UIFileManagerModelColumn_ChangeTime);
+            QVariant dataRight = pRightItem->data(UIFileManagerModelColumn_ChangeTime);
+            QDateTime leftDateTime = dataLeft.toDateTime();
+            QDateTime rightDateTime = dataRight.toDateTime();
+            return (leftDateTime < rightDateTime);
+        }
+        /* When we show human readble sizes in size column sorting gets confused, so do it here: */
+        else if(sortColumn() == UIFileManagerModelColumn_Size)
+        {
+            qulonglong leftSize = pLeftItem->data(UIFileManagerModelColumn_Size).toULongLong();
+            qulonglong rightSize = pRightItem->data(UIFileManagerModelColumn_Size).toULongLong();
+            return (leftSize < rightSize);
+
+        }
+    }
+    return QSortFilterProxyModel::lessThan(left, right);
+}
+
+UIFileManagerModel::UIFileManagerModel(QObject *parent)
+    : QAbstractItemModel(parent)
+    , m_pParent(qobject_cast<UIFileManagerTable*>(parent))
+{
+}
+
+UIFileTableItem* UIFileManagerModel::rootItem() const
+{
+    if (!m_pParent)
+        return 0;
+    return m_pParent->m_pRootItem;
+}
+
+UIFileManagerModel::~UIFileManagerModel()
+{}
+
+int UIFileManagerModel::columnCount(const QModelIndex &parent) const
+{
+    if (parent.isValid())
+        return static_cast<UIFileTableItem*>(parent.internalPointer())->columnCount();
+    else
+    {
+        if (!rootItem())
+            return 0;
+        else
+            return rootItem()->columnCount();
+    }
+}
+
+bool UIFileManagerModel::setData(const QModelIndex &index, const QVariant &value, int role)
+{
+    if (index.isValid() && role == Qt::EditRole)
+    {
+        if (index.column() == 0 && value.canConvert(QMetaType::QString))
+        {
+            UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
+            if (!item || !m_pParent)
+                return false;
+            if (m_pParent->renameItem(item, value.toString()))
+            {
+                item->setData(value, index.column());
+                emit dataChanged(index, index);
+            }
+            else
+            {
+                if (m_pParent)
+                    m_pParent->emitLogOutput(QString(item->path()).append(" could not be renamed"), FileManagerLogType_Error);
+            }
+            return true;
+        }
+    }
+    return false;
+}
+
+QVariant UIFileManagerModel::data(const QModelIndex &index, int role) const
+{
+    if (!index.isValid())
+        return QVariant();
+    UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
+    if (!item)
+        return QVariant();
+
+    if (role == Qt::DisplayRole || role == Qt::EditRole)
+    {
+        /* dont show anything but the name for up directories: */
+        if (item->isUpDirectory() && index.column() != UIFileManagerModelColumn_Name)
+            return QVariant();
+        /* Format date/time column: */
+        if (item->data(index.column()).canConvert(QMetaType::QDateTime))
+        {
+            QDateTime dateTime = item->data(index.column()).toDateTime();
+            if (dateTime.isValid())
+                return dateTime.toString("dd.MM.yyyy hh:mm:ss");
+        }
+        /* Decide whether to show human-readable file object sizes: */
+        if (index.column() == UIFileManagerModelColumn_Size)
+        {
+            UIFileManagerOptions* pOptions =
+                UIFileManagerOptions::instance();
+            if (pOptions && pOptions->bShowHumanReadableSizes)
+            {
+                qulonglong size = item->data(index.column()).toULongLong();
+                return UIFileManagerTable::humanReadableSize(size);
+            }
+            else
+                return item->data(index.column());
+        }
+        return item->data(index.column());
+    }
+    /* Show the up directory array: */
+    if (role == Qt::DecorationRole && index.column() == 0)
+    {
+        if (item->isDirectory())
+        {
+            if (item->isUpDirectory())
+                return QIcon(":/arrow_up_10px_x2.png");
+            else if(item->isDriveItem())
+                return QIcon(":/hd_32px.png");
+            else
+                return QIcon(":/file_manager_folder_16px.png");
+        }
+        else if (item->isFile())
+            return QIcon(":/file_manager_file_16px.png");
+        else if (item->isSymLink())
+        {
+            if (item->isSymLinkToADirectory())
+                return QIcon(":/file_manager_folder_symlink_16px.png");
+            else
+                return QIcon(":/file_manager_file_symlink_16px.png");
+        }
+    }
+
+    return QVariant();
+}
+
+Qt::ItemFlags UIFileManagerModel::flags(const QModelIndex &index) const
+{
+    if (!index.isValid())
+        return 0;
+    UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
+    if (!item)
+        return QAbstractItemModel::flags(index);
+
+    if (!item->isUpDirectory() && index.column() == 0)
+        return QAbstractItemModel::flags(index)  | Qt::ItemIsEditable;
+    return QAbstractItemModel::flags(index);
+}
+
+QVariant UIFileManagerModel::headerData(int section, Qt::Orientation orientation,
+                               int role) const
+{
+    if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
+    {
+        if (!rootItem())
+            return QVariant();
+        else
+            return rootItem()->data(section);
+    }
+    return QVariant();
+}
+
+QModelIndex UIFileManagerModel::index(UIFileTableItem* item)
+{
+    if (!item)
+        return QModelIndex();
+    return createIndex(item->row(), 0, item);
+}
+
+QModelIndex UIFileManagerModel::index(int row, int column, const QModelIndex &parent)
+            const
+{
+    if (!hasIndex(row, column, parent))
+        return QModelIndex();
+
+    UIFileTableItem *parentItem;
+
+    if (!parent.isValid())
+        parentItem = rootItem();
+    else
+        parentItem = static_cast<UIFileTableItem*>(parent.internalPointer());
+    if (!parentItem)
+        return QModelIndex();
+
+    UIFileTableItem *childItem = parentItem->child(row);
+    if (childItem)
+        return createIndex(row, column, childItem);
+    else
+        return QModelIndex();
+}
+
+
+QModelIndex UIFileManagerModel::parent(const QModelIndex &index) const
+{
+    if (!index.isValid())
+        return QModelIndex();
+
+    UIFileTableItem *childItem = static_cast<UIFileTableItem*>(index.internalPointer());
+    UIFileTableItem *parentItem = childItem->parentItem();
+
+    if (parentItem == rootItem())
+        return QModelIndex();
+
+    return createIndex(parentItem->row(), 0, parentItem);
+}
+
+int UIFileManagerModel::rowCount(const QModelIndex &parent) const
+{
+    if (parent.column() > 0)
+        return 0;
+    UIFileTableItem *parentItem = 0;
+    if (!parent.isValid())
+        parentItem = rootItem();
+    else
+        parentItem = static_cast<UIFileTableItem*>(parent.internalPointer());
+    if (!parentItem)
+        return 0;
+    return parentItem->childCount();
+}
+
+void UIFileManagerModel::signalUpdate()
+{
+    emit layoutChanged();
+}
+
+QModelIndex UIFileManagerModel::rootIndex() const
+{
+    if (!rootItem())
+        return QModelIndex();
+    return createIndex(rootItem()->child(0)->row(), 0,
+                       rootItem()->child(0));
+}
+
+void UIFileManagerModel::beginReset()
+{
+    beginResetModel();
+}
+
+void UIFileManagerModel::endReset()
+{
+    endResetModel();
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerModel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerModel.h	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerModel.h	(revision 76177)
@@ -0,0 +1,100 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIFileManagerModel class declaration.
+ */
+
+/*
+ * Copyright (C) 2016-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIFileManagerModel_h___
+#define ___UIFileManagerModel_h___
+
+/* Qt includes: */
+#include <QAbstractItemModel>
+#include <QSortFilterProxyModel>
+
+/* GUI includes: */
+#include "QITableView.h"
+
+/* Forward declarations: */
+class UIFileTableItem;
+class UIFileManagerTable;
+
+enum UIFileManagerModelColumn
+{
+    UIFileManagerModelColumn_Name = 0,
+    UIFileManagerModelColumn_Size,
+    UIFileManagerModelColumn_ChangeTime,
+    UIFileManagerModelColumn_Owner,
+    UIFileManagerModelColumn_Permissions,
+    UIFileManagerModelColumn_Max
+};
+
+/** A QSortFilterProxyModel extension used in file tables. Modifies some
+ *  of the base class behavior like lessThan(..) */
+class UIGuestControlFileProxyModel : public QSortFilterProxyModel
+{
+
+    Q_OBJECT;
+
+public:
+
+    UIGuestControlFileProxyModel(QObject *parent = 0);
+
+protected:
+
+    bool lessThan(const QModelIndex &left, const QModelIndex &right) const /* override */;
+};
+
+/** UIFileManagerModel serves as the model for a file structure.
+ *  it supports a tree level hierarchy which can be displayed with
+ *  QTableView and/or QTreeView. Note the file structure data is not
+ *  kept by the model but rather by the containing widget which also servers
+ *  as the interface to functionality that this model provides.*/
+class UIFileManagerModel : public QAbstractItemModel
+{
+
+    Q_OBJECT;
+
+public:
+
+    explicit UIFileManagerModel(QObject *parent = 0);
+    ~UIFileManagerModel();
+
+    QVariant       data(const QModelIndex &index, int role) const /* override */;
+    bool           setData(const QModelIndex &index, const QVariant &value, int role);
+
+    Qt::ItemFlags  flags(const QModelIndex &index) const /* override */;
+    QVariant       headerData(int section, Qt::Orientation orientation,
+                              int role = Qt::DisplayRole) const /* override */;
+    QModelIndex    index(int row, int column,
+                      const QModelIndex &parent = QModelIndex()) const /* override */;
+    QModelIndex    index(UIFileTableItem* item);
+    QModelIndex    parent(const QModelIndex &index) const /* override */;
+    int            rowCount(const QModelIndex &parent = QModelIndex()) const /* override */;
+    int            columnCount(const QModelIndex &parent = QModelIndex()) const /* override */;
+    void           signalUpdate();
+    QModelIndex    rootIndex() const;
+    void           beginReset();
+    void           endReset();
+    static const char* strUpDirectoryString;
+
+private:
+
+    UIFileTableItem* rootItem() const;
+    void setupModelData(const QStringList &lines, UIFileTableItem *parent);
+    UIFileManagerTable *m_pParent;
+    UIFileTableItem    *m_pRootItem;
+};
+
+
+#endif /* !___UIFileManagerModel_h___ */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerOperationsPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerOperationsPanel.cpp	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerOperationsPanel.cpp	(revision 76177)
@@ -0,0 +1,472 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVMLogViewer class implementation.
+ */
+
+/*
+ * Copyright (C) 2010-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QHBoxLayout>
+# include <QGridLayout>
+# include <QLabel>
+# include <QMenu>
+# include <QProgressBar>
+# include <QScrollArea>
+# include <QScrollBar>
+# include <QStyle>
+
+
+/* GUI includes: */
+# include "QIToolButton.h"
+# include "QILabel.h"
+# include "UIErrorString.h"
+# include "UIIconPool.h"
+# include "UIFileManager.h"
+# include "UIFileManagerOperationsPanel.h"
+# include "UIProgressEventHandler.h"
+
+/* COM includes: */
+# include "CProgress.h"
+
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+/*********************************************************************************************************************************
+*   UIFileOperationProgressWidget definition.                                                                                    *
+*********************************************************************************************************************************/
+
+class UIFileOperationProgressWidget : public QIWithRetranslateUI<QFrame>
+{
+
+    Q_OBJECT;
+
+public:
+
+    UIFileOperationProgressWidget(const CProgress &comProgress, QWidget *pParent = 0);
+    ~UIFileOperationProgressWidget();
+    bool isCompleted() const;
+    bool isCanceled() const;
+
+signals:
+
+    void sigProgressComplete(QUuid progressId);
+    void sigProgressFail(QString strErrorString, FileManagerLogType eLogType);
+    void sigFocusIn(QWidget *pWidget);
+    void sigFocusOut(QWidget *pWidget);
+
+protected:
+
+    virtual void retranslateUi() /* override */;
+    virtual void focusInEvent(QFocusEvent *pEvent) /* override */;
+    virtual void focusOutEvent(QFocusEvent *pEvent) /* override */;
+
+private slots:
+
+    void sltHandleProgressPercentageChange(const QUuid &uProgressId, const int iPercent);
+    void sltHandleProgressComplete(const QUuid &uProgressId);
+    void sltCancelProgress();
+
+private:
+    enum OperationStatus
+    {
+        OperationStatus_NotStarted,
+        OperationStatus_Working,
+        OperationStatus_Paused,
+        OperationStatus_Canceled,
+        OperationStatus_Succeded,
+        OperationStatus_Failed,
+        OperationStatus_Invalid,
+        OperationStatus_Max
+
+    };
+    void prepare();
+    void prepareWidgets();
+    void prepareEventHandler();
+    void cleanupEventHandler();
+
+    OperationStatus         m_eStatus;
+    CProgress               m_comProgress;
+    UIProgressEventHandler *m_pEventHandler;
+    QGridLayout            *m_pMainLayout;
+    QProgressBar           *m_pProgressBar;
+    QIToolButton           *m_pCancelButton;
+    QILabel                *m_pStatusLabel;
+    QILabel                *m_pPercentageLabel;
+};
+
+
+/*********************************************************************************************************************************
+*   UIFileOperationProgressWidget implementation.                                                                                *
+*********************************************************************************************************************************/
+
+UIFileOperationProgressWidget::UIFileOperationProgressWidget(const CProgress &comProgress, QWidget *pParent /* = 0 */)
+    : QIWithRetranslateUI<QFrame>(pParent)
+    , m_eStatus(OperationStatus_NotStarted)
+    , m_comProgress(comProgress)
+    , m_pEventHandler(0)
+    , m_pMainLayout(0)
+    , m_pProgressBar(0)
+    , m_pCancelButton(0)
+    , m_pStatusLabel(0)
+    , m_pPercentageLabel(0)
+{
+    prepare();
+    setFocusPolicy(Qt::ClickFocus);
+    setStyleSheet("QFrame:focus {  border-width: 1px; border-style: dashed; border-color: black; }");
+}
+
+UIFileOperationProgressWidget::~UIFileOperationProgressWidget()
+{
+    cleanupEventHandler();
+}
+
+bool UIFileOperationProgressWidget::isCompleted() const
+{
+    if (m_comProgress.isNull())
+        return true;
+    return m_comProgress.GetCompleted();
+}
+
+bool UIFileOperationProgressWidget::isCanceled() const
+{
+    if (m_comProgress.isNull())
+        return true;
+    return m_comProgress.GetCanceled();
+}
+
+void UIFileOperationProgressWidget::retranslateUi()
+{
+    if (m_pCancelButton)
+        m_pCancelButton->setToolTip(UIFileManager::tr("Cancel"));
+
+    switch (m_eStatus)
+    {
+        case OperationStatus_NotStarted:
+            m_pStatusLabel->setText(UIFileManager::tr("Not yet started"));
+            break;
+        case OperationStatus_Working:
+            m_pStatusLabel->setText(UIFileManager::tr("Working"));
+            break;
+        case OperationStatus_Paused:
+            m_pStatusLabel->setText(UIFileManager::tr("Paused"));
+            break;
+        case OperationStatus_Canceled:
+            m_pStatusLabel->setText(UIFileManager::tr("Canceled"));
+            break;
+        case OperationStatus_Succeded:
+            m_pStatusLabel->setText(UIFileManager::tr("Succeded"));
+            break;
+        case OperationStatus_Failed:
+            m_pStatusLabel->setText(UIFileManager::tr("Failed"));
+            break;
+        case OperationStatus_Invalid:
+        case OperationStatus_Max:
+        default:
+            m_pStatusLabel->setText(UIFileManager::tr("Invalid"));
+            break;
+    }
+}
+
+void UIFileOperationProgressWidget::focusInEvent(QFocusEvent *pEvent)
+{
+    QFrame::focusInEvent(pEvent);
+    emit sigFocusIn(this);
+}
+
+void UIFileOperationProgressWidget::focusOutEvent(QFocusEvent *pEvent)
+{
+    QFrame::focusOutEvent(pEvent);
+    emit sigFocusOut(this);
+}
+
+void UIFileOperationProgressWidget::prepare()
+{
+    prepareWidgets();
+    prepareEventHandler();
+    retranslateUi();
+}
+
+void UIFileOperationProgressWidget::prepareWidgets()
+{
+    m_pMainLayout = new QGridLayout;
+    if (!m_pMainLayout)
+        return;
+    //m_pMainLayout->setSpacing(0);
+
+    m_pProgressBar = new QProgressBar;
+    if (m_pProgressBar)
+    {
+        m_pProgressBar->setMinimum(0);
+        m_pProgressBar->setMaximum(100);
+        /* Hide the QProgressBar's text since in MacOS it never shows: */
+        m_pProgressBar->setTextVisible(false);
+        m_pMainLayout->addWidget(m_pProgressBar, 0, 0, 1, 2);
+    }
+
+    m_pCancelButton = new QIToolButton;
+    if (m_pCancelButton)
+    {
+        m_pCancelButton->setIcon(QApplication::style()->standardIcon(QStyle::SP_DockWidgetCloseButton));
+        connect(m_pCancelButton, &QIToolButton::clicked, this, &UIFileOperationProgressWidget::sltCancelProgress);
+        if (!m_comProgress.isNull() && !m_comProgress.GetCancelable())
+            m_pCancelButton->setEnabled(false);
+        m_pMainLayout->addWidget(m_pCancelButton, 0, 2, 1, 1);
+    }
+
+    m_pStatusLabel = new QILabel;
+    if (m_pStatusLabel)
+    {
+        m_pStatusLabel->setContextMenuPolicy(Qt::NoContextMenu);
+        m_pMainLayout->addWidget(m_pStatusLabel, 0, 3, 1, 1);
+    }
+
+    m_pPercentageLabel = new QILabel;
+    if (m_pPercentageLabel)
+    {
+        m_pPercentageLabel->setContextMenuPolicy(Qt::NoContextMenu);
+        m_pMainLayout->addWidget(m_pPercentageLabel, 1, 0, 1, 4);
+    }
+
+    setLayout(m_pMainLayout);
+    retranslateUi();
+}
+
+void UIFileOperationProgressWidget::prepareEventHandler()
+{
+    if (m_comProgress.isNull())
+        return;
+    m_pEventHandler = new UIProgressEventHandler(this, m_comProgress);
+    connect(m_pEventHandler, &UIProgressEventHandler::sigProgressPercentageChange,
+            this, &UIFileOperationProgressWidget::sltHandleProgressPercentageChange);
+    connect(m_pEventHandler, &UIProgressEventHandler::sigProgressTaskComplete,
+            this, &UIFileOperationProgressWidget::sltHandleProgressComplete);
+    m_eStatus = OperationStatus_Working;
+    retranslateUi();
+}
+
+void UIFileOperationProgressWidget::cleanupEventHandler()
+{
+    delete m_pEventHandler;
+    m_pEventHandler = 0;
+}
+
+void UIFileOperationProgressWidget::sltHandleProgressPercentageChange(const QUuid &uProgressId, const int iPercent)
+{
+    Q_UNUSED(uProgressId);
+    Q_UNUSED(iPercent);
+    m_pProgressBar->setValue(iPercent);
+    if (m_pPercentageLabel)
+        m_pPercentageLabel->setText(QString("%1%").arg(QString::number(iPercent)));
+}
+
+void UIFileOperationProgressWidget::sltHandleProgressComplete(const QUuid &uProgressId)
+{
+    Q_UNUSED(uProgressId);
+    if (m_pCancelButton)
+        m_pCancelButton->setEnabled(false);
+
+    if (!m_comProgress.isOk() || m_comProgress.GetResultCode() != 0)
+    {
+        emit sigProgressFail(UIErrorString::formatErrorInfo(m_comProgress), FileManagerLogType_Error);
+        m_eStatus = OperationStatus_Failed;
+    }
+    else
+    {
+        emit sigProgressComplete(m_comProgress.GetId());
+        m_eStatus = OperationStatus_Succeded;
+    }
+    if (m_pProgressBar)
+        m_pProgressBar->setEnabled(false);
+    cleanupEventHandler();
+    retranslateUi();
+}
+
+void UIFileOperationProgressWidget::sltCancelProgress()
+{
+    m_comProgress.Cancel();
+    /* Since we dont have a "progress canceled" event we have to do this here: */
+    if (m_pCancelButton)
+        m_pCancelButton->setEnabled(false);
+    if (m_pProgressBar)
+        m_pProgressBar->setEnabled(false);
+    m_eStatus = OperationStatus_Canceled;
+    cleanupEventHandler();
+    retranslateUi();
+}
+
+
+/*********************************************************************************************************************************
+*   UIFileManagerOperationsPanel implementation.                                                                     *
+*********************************************************************************************************************************/
+
+UIFileManagerOperationsPanel::UIFileManagerOperationsPanel(UIFileManager *pManagerWidget,
+                                                                                   QWidget *pParent)
+    : UIFileManagerPanel(pManagerWidget, pParent)
+    , m_pScrollArea(0)
+    , m_pContainerWidget(0)
+    , m_pContainerLayout(0)
+    , m_pContainerSpaceItem(0)
+    , m_pWidgetInFocus(0)
+{
+    prepare();
+}
+
+void UIFileManagerOperationsPanel::addNewProgress(const CProgress &comProgress)
+{
+    if (!m_pContainerLayout)
+        return;
+
+    UIFileOperationProgressWidget *pOperationsWidget = new UIFileOperationProgressWidget(comProgress);
+    if (!pOperationsWidget)
+        return;
+    m_widgetSet.insert(pOperationsWidget);
+    m_pContainerLayout->insertWidget(m_pContainerLayout->count() - 1, pOperationsWidget);
+
+    connect(pOperationsWidget, &UIFileOperationProgressWidget::sigProgressComplete,
+            this, &UIFileManagerOperationsPanel::sigFileOperationComplete);
+    connect(pOperationsWidget, &UIFileOperationProgressWidget::sigProgressFail,
+            this, &UIFileManagerOperationsPanel::sigFileOperationFail);
+
+    connect(pOperationsWidget, &UIFileOperationProgressWidget::sigFocusIn,
+            this, &UIFileManagerOperationsPanel::sltHandleWidgetFocusIn);
+    connect(pOperationsWidget, &UIFileOperationProgressWidget::sigFocusOut,
+            this, &UIFileManagerOperationsPanel::sltHandleWidgetFocusOut);
+}
+
+QString UIFileManagerOperationsPanel::panelName() const
+{
+    return "OperationsPanel";
+}
+
+void UIFileManagerOperationsPanel::prepareWidgets()
+{
+    if (!mainLayout())
+        return;
+
+
+    m_pScrollArea = new QScrollArea;
+    m_pContainerWidget = new QWidget;
+    m_pContainerLayout = new QVBoxLayout;
+    if (!m_pScrollArea || !m_pContainerWidget || !m_pContainerLayout)
+        return;
+
+    QScrollBar *pVerticalScrollBar = m_pScrollArea->verticalScrollBar();
+    if (pVerticalScrollBar)
+        QObject::connect(pVerticalScrollBar, &QScrollBar::rangeChanged, this, &UIFileManagerOperationsPanel::sltScrollToBottom);
+
+    m_pScrollArea->setBackgroundRole(QPalette::Window);
+    m_pScrollArea->setWidgetResizable(true);
+
+    mainLayout()->addWidget(m_pScrollArea);
+
+    m_pScrollArea->setWidget(m_pContainerWidget);
+    m_pContainerWidget->setLayout(m_pContainerLayout);
+    m_pContainerLayout->addStretch(4);
+}
+
+void UIFileManagerOperationsPanel::prepareConnections()
+{
+
+}
+
+void UIFileManagerOperationsPanel::retranslateUi()
+{
+    UIFileManagerPanel::retranslateUi();
+}
+
+void UIFileManagerOperationsPanel::contextMenuEvent(QContextMenuEvent *pEvent)
+{
+    QMenu *menu = new QMenu(this);
+
+    if (m_pWidgetInFocus)
+    {
+        QAction *pRemoveSelected = menu->addAction(UIFileManager::tr("Remove Selected"));
+        connect(pRemoveSelected, &QAction::triggered,
+                this, &UIFileManagerOperationsPanel::sltRemoveSelected);
+    }
+
+    QAction *pRemoveFinished = menu->addAction(UIFileManager::tr("Remove Finished"));
+    QAction *pRemoveAll = menu->addAction(UIFileManager::tr("Remove All"));
+
+    connect(pRemoveFinished, &QAction::triggered,
+            this, &UIFileManagerOperationsPanel::sltRemoveFinished);
+    connect(pRemoveAll, &QAction::triggered,
+            this, &UIFileManagerOperationsPanel::sltRemoveAll);
+
+    menu->exec(pEvent->globalPos());
+    delete menu;
+}
+
+void UIFileManagerOperationsPanel::sltRemoveFinished()
+{
+    QList<UIFileOperationProgressWidget*> widgetsToRemove;
+    foreach (QWidget *pWidget, m_widgetSet)
+    {
+        UIFileOperationProgressWidget *pProgressWidget = qobject_cast<UIFileOperationProgressWidget*>(pWidget);
+        if (pProgressWidget && pProgressWidget->isCompleted())
+        {
+            delete pProgressWidget;
+            widgetsToRemove << pProgressWidget;
+        }
+    }
+    foreach (UIFileOperationProgressWidget *pWidget, widgetsToRemove)
+        m_widgetSet.remove(pWidget);
+}
+
+void UIFileManagerOperationsPanel::sltRemoveAll()
+{
+    foreach (QWidget *pWidget, m_widgetSet)
+    {
+        if (pWidget)
+        {
+            delete pWidget;
+        }
+    }
+    m_widgetSet.clear();
+}
+
+void UIFileManagerOperationsPanel::sltRemoveSelected()
+{
+    if (!m_pWidgetInFocus)
+        return;
+    delete m_pWidgetInFocus;
+    m_widgetSet.remove(m_pWidgetInFocus);
+}
+
+void UIFileManagerOperationsPanel::sltHandleWidgetFocusIn(QWidget *pWidget)
+{
+    if (!pWidget)
+        return;
+    m_pWidgetInFocus = pWidget;
+}
+
+void UIFileManagerOperationsPanel::sltHandleWidgetFocusOut(QWidget *pWidget)
+{
+    if (!pWidget)
+        return;
+    m_pWidgetInFocus = 0;
+}
+
+void UIFileManagerOperationsPanel::sltScrollToBottom(int iMin, int iMax)
+{
+    Q_UNUSED(iMin);
+    if (m_pScrollArea)
+    m_pScrollArea->verticalScrollBar()->setValue(iMax);
+}
+
+#include "UIFileManagerOperationsPanel.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerOperationsPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerOperationsPanel.h	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerOperationsPanel.h	(revision 76177)
@@ -0,0 +1,94 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVMLogViewer class declaration.
+ */
+
+/*
+ * Copyright (C) 2010-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIFileManagerOperationsPanel_h___
+#define ___UIFileManagerOperationsPanel_h___
+
+/* Qt includes: */
+# include <QUuid>
+
+/* GUI includes: */
+#include "UIGuestControlDefs.h"
+#include "UIFileManagerPanel.h"
+
+/* Forward declarations: */
+class CProgress;
+class QScrollArea;
+class QSpacerItem;
+class QVBoxLayout;
+
+class UIFileOperationModel;
+class UIFileOperationProgressWidget;
+class UIFileManager;
+
+
+/** UIVMLogViewerPanel extension hosting a QListWidget which in turn has a special QWidget extension
+  * to manage multiple CProgress instances. This is particulary used in monitoring file operations. */
+class UIFileManagerOperationsPanel : public UIFileManagerPanel
+{
+    Q_OBJECT;
+
+signals:
+
+    void sigFileOperationComplete(QUuid progressId);
+    void sigFileOperationFail(QString strErrorString, FileManagerLogType eLogType);
+
+public:
+
+    UIFileManagerOperationsPanel(UIFileManager *pManagerWidget, QWidget *pParent);
+    virtual QString panelName() const /* override */;
+    void addNewProgress(const CProgress &comProgress);
+
+protected:
+
+    /** @name Preparation specific functions.
+      * @{ */
+        virtual void prepareWidgets() /* override */;
+        virtual void prepareConnections() /* override */;
+    /** @} */
+
+    /** Handles the translation event. */
+    virtual void retranslateUi() /* override */;
+    virtual void contextMenuEvent(QContextMenuEvent *pEvent) /* override */;
+
+private slots:
+
+    void sltRemoveFinished();
+    void sltRemoveAll();
+    void sltRemoveSelected();
+
+    void sltHandleWidgetFocusIn(QWidget *pWidget);
+    void sltHandleWidgetFocusOut(QWidget *pWidget);
+    void sltScrollToBottom(int iMin, int iMax);
+
+private:
+
+    /** @name Member variables.
+      * @{ */
+        QScrollArea    *m_pScrollArea;
+        QWidget        *m_pContainerWidget;
+        QVBoxLayout    *m_pContainerLayout;
+        QSpacerItem    *m_pContainerSpaceItem;
+        QWidget        *m_pWidgetInFocus;
+        QSet<QWidget*>  m_widgetSet;
+    /** @} */
+
+
+
+};
+
+#endif /* !___UIFileManagerOperationsPanel_h___ */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerOptionsPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerOptionsPanel.cpp	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerOptionsPanel.cpp	(revision 76177)
@@ -0,0 +1,177 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVMLogViewer class implementation.
+ */
+
+/*
+ * Copyright (C) 2010-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QComboBox>
+# include <QHBoxLayout>
+# include <QFontDatabase>
+# include <QFontDialog>
+# include <QCheckBox>
+# include <QLabel>
+# include <QSpinBox>
+
+/* GUI includes: */
+# include "QIToolButton.h"
+# include "UIIconPool.h"
+# include "UIFileManager.h"
+# include "UIFileManagerOptionsPanel.h"
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+UIFileManagerOptionsPanel::UIFileManagerOptionsPanel(UIFileManager *pManagerWidget,
+                                                                               QWidget *pParent, UIFileManagerOptions *pFileManagerOptions)
+    : UIFileManagerPanel(pManagerWidget, pParent)
+    , m_pListDirectoriesOnTopCheckBox(0)
+    , m_pDeleteConfirmationCheckBox(0)
+    , m_pHumanReabableSizesCheckBox(0)
+    , m_pFileManagerOptions(pFileManagerOptions)
+{
+    prepare();
+}
+
+QString UIFileManagerOptionsPanel::panelName() const
+{
+    return "OptionsPanel";
+}
+
+void UIFileManagerOptionsPanel::update()
+{
+    if (!m_pFileManagerOptions)
+        return;
+
+    if (m_pListDirectoriesOnTopCheckBox)
+    {
+        m_pListDirectoriesOnTopCheckBox->blockSignals(true);
+        m_pListDirectoriesOnTopCheckBox->setChecked(m_pFileManagerOptions->bListDirectoriesOnTop);
+        m_pListDirectoriesOnTopCheckBox->blockSignals(false);
+    }
+
+    if (m_pDeleteConfirmationCheckBox)
+    {
+        m_pDeleteConfirmationCheckBox->blockSignals(true);
+        m_pDeleteConfirmationCheckBox->setChecked(m_pFileManagerOptions->bAskDeleteConfirmation);
+        m_pDeleteConfirmationCheckBox->blockSignals(false);
+    }
+
+    if (m_pHumanReabableSizesCheckBox)
+    {
+        m_pHumanReabableSizesCheckBox->blockSignals(true);
+        m_pHumanReabableSizesCheckBox->setChecked(m_pFileManagerOptions->bShowHumanReadableSizes);
+        m_pHumanReabableSizesCheckBox->blockSignals(false);
+    }
+}
+
+void UIFileManagerOptionsPanel::prepareWidgets()
+{
+    if (!mainLayout())
+        return;
+
+    m_pListDirectoriesOnTopCheckBox = new QCheckBox;
+    if (m_pListDirectoriesOnTopCheckBox)
+    {
+        mainLayout()->addWidget(m_pListDirectoriesOnTopCheckBox, 0, Qt::AlignLeft);
+    }
+
+    m_pDeleteConfirmationCheckBox = new QCheckBox;
+    if (m_pDeleteConfirmationCheckBox)
+    {
+        mainLayout()->addWidget(m_pDeleteConfirmationCheckBox, 0, Qt::AlignLeft);
+    }
+
+    m_pHumanReabableSizesCheckBox = new QCheckBox;
+    if (m_pHumanReabableSizesCheckBox)
+    {
+        mainLayout()->addWidget(m_pHumanReabableSizesCheckBox, 0, Qt::AlignLeft);
+    }
+    /* Set initial checkbox status wrt. options: */
+    if (m_pFileManagerOptions)
+    {
+        if (m_pListDirectoriesOnTopCheckBox)
+            m_pListDirectoriesOnTopCheckBox->setChecked(m_pFileManagerOptions->bListDirectoriesOnTop);
+        if (m_pDeleteConfirmationCheckBox)
+            m_pDeleteConfirmationCheckBox->setChecked(m_pFileManagerOptions->bAskDeleteConfirmation);
+        if (m_pHumanReabableSizesCheckBox)
+            m_pHumanReabableSizesCheckBox->setChecked(m_pFileManagerOptions->bShowHumanReadableSizes);
+    }
+    retranslateUi();
+    mainLayout()->addStretch(2);
+}
+
+void UIFileManagerOptionsPanel::sltListDirectoryCheckBoxToogled(bool bChecked)
+{
+    if (!m_pFileManagerOptions)
+        return;
+    m_pFileManagerOptions->bListDirectoriesOnTop = bChecked;
+    emit sigOptionsChanged();
+}
+
+void UIFileManagerOptionsPanel::sltDeleteConfirmationCheckBoxToogled(bool bChecked)
+{
+    if (!m_pFileManagerOptions)
+        return;
+    m_pFileManagerOptions->bAskDeleteConfirmation = bChecked;
+    emit sigOptionsChanged();
+}
+
+void UIFileManagerOptionsPanel::sltHumanReabableSizesCheckBoxToogled(bool bChecked)
+{
+    if (!m_pFileManagerOptions)
+        return;
+    m_pFileManagerOptions->bShowHumanReadableSizes = bChecked;
+    emit sigOptionsChanged();
+}
+
+void UIFileManagerOptionsPanel::prepareConnections()
+{
+    if (m_pListDirectoriesOnTopCheckBox)
+        connect(m_pListDirectoriesOnTopCheckBox, &QCheckBox::toggled,
+                this, &UIFileManagerOptionsPanel::sltListDirectoryCheckBoxToogled);
+    if (m_pDeleteConfirmationCheckBox)
+        connect(m_pDeleteConfirmationCheckBox, &QCheckBox::toggled,
+                this, &UIFileManagerOptionsPanel::sltDeleteConfirmationCheckBoxToogled);
+    if (m_pHumanReabableSizesCheckBox)
+        connect(m_pHumanReabableSizesCheckBox, &QCheckBox::toggled,
+                this, &UIFileManagerOptionsPanel::sltHumanReabableSizesCheckBoxToogled);
+}
+
+void UIFileManagerOptionsPanel::retranslateUi()
+{
+    UIFileManagerPanel::retranslateUi();
+    if (m_pListDirectoriesOnTopCheckBox)
+    {
+        m_pListDirectoriesOnTopCheckBox->setText(UIFileManager::tr("List directories on top"));
+        m_pListDirectoriesOnTopCheckBox->setToolTip(UIFileManager::tr("List directories before files"));
+    }
+
+    if (m_pDeleteConfirmationCheckBox)
+    {
+        m_pDeleteConfirmationCheckBox->setText(UIFileManager::tr("Ask before delete"));
+        m_pDeleteConfirmationCheckBox->setToolTip(UIFileManager::tr("Show a confirmation dialog "
+                                                                                "before deleting files and directories"));
+    }
+
+    if (m_pHumanReabableSizesCheckBox)
+    {
+        m_pHumanReabableSizesCheckBox->setText(UIFileManager::tr("Human readable sizes"));
+        m_pHumanReabableSizesCheckBox->setToolTip(UIFileManager::tr("Show file/directory sizes in human "
+                                                                                "readable format rather than in bytes"));
+    }
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerOptionsPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerOptionsPanel.h	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerOptionsPanel.h	(revision 76177)
@@ -0,0 +1,72 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVMLogViewer class declaration.
+ */
+
+/*
+ * Copyright (C) 2010-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIFileManagerOptionsPanel_h___
+#define ___UIFileManagerOptionsPanel_h___
+
+/* GUI includes: */
+#include "UIFileManagerPanel.h"
+
+/* Forward declarations: */
+class QCheckBox;
+class QSpinBox;
+class QLabel;
+class QIToolButton;
+class UIFileManagerOptions;
+
+/** UIFileManagerPanel extension to change file manager options. It directly
+ *  modifies the options through the passed UIFileManagerOptions instance. */
+class UIFileManagerOptionsPanel : public UIFileManagerPanel
+{
+    Q_OBJECT;
+
+public:
+
+    UIFileManagerOptionsPanel(UIFileManager *pManagerWidget,
+                                           QWidget *pParent, UIFileManagerOptions *pFileManagerOptions);
+    virtual QString panelName() const /* override */;
+    /** Reads the file manager options and updates the widget accordingly. This functions is typically called
+     *  when file manager options have been changed by other means and this panel needs to adapt. */
+    void update();
+
+signals:
+
+    void sigOptionsChanged();
+
+protected:
+
+    virtual void prepareWidgets() /* override */;
+    virtual void prepareConnections() /* override */;
+
+    /** Handles the translation event. */
+    void retranslateUi();
+
+private slots:
+
+    void sltListDirectoryCheckBoxToogled(bool bChecked);
+    void sltDeleteConfirmationCheckBoxToogled(bool bChecked);
+    void sltHumanReabableSizesCheckBoxToogled(bool bChecked);
+
+private:
+
+    QCheckBox  *m_pListDirectoriesOnTopCheckBox;
+    QCheckBox  *m_pDeleteConfirmationCheckBox;
+    QCheckBox  *m_pHumanReabableSizesCheckBox;
+    UIFileManagerOptions *m_pFileManagerOptions;
+};
+
+#endif /* !___UIFileManagerOptionsPanel_h___ */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerPanel.cpp	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerPanel.cpp	(revision 76177)
@@ -0,0 +1,129 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVMLogViewer class implementation.
+ */
+
+/*
+ * Copyright (C) 2010-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QComboBox>
+# include <QHBoxLayout>
+# include <QLabel>
+# include <QPlainTextEdit>
+# include <QTextCursor>
+# include <QToolButton>
+
+/* GUI includes: */
+# include "QIToolButton.h"
+# include "UIIconPool.h"
+# include "UIFileManager.h"
+# include "UIFileManagerPanel.h"
+# ifdef VBOX_WS_MAC
+#  include "VBoxUtils-darwin.h"
+# endif
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+UIFileManagerPanel::UIFileManagerPanel(UIFileManager *pManagerWidget, QWidget *pParent)
+    : QIWithRetranslateUI<QWidget>(pParent)
+    , m_pMainLayout(0)
+    , m_pCloseButton(0)
+    , m_pFileManager(pManagerWidget)
+{
+    prepare();
+}
+
+void UIFileManagerPanel::setCloseButtonShortCut(QKeySequence shortCut)
+{
+    if (!m_pCloseButton)
+        return;
+    m_pCloseButton->setShortcut(shortCut);
+}
+
+QHBoxLayout* UIFileManagerPanel::mainLayout()
+{
+    return m_pMainLayout;
+}
+
+void UIFileManagerPanel::prepare()
+{
+    prepareWidgets();
+    prepareConnections();
+    retranslateUi();
+}
+
+void UIFileManagerPanel::prepareWidgets()
+{
+    m_pMainLayout = new QHBoxLayout(this);
+    if (m_pMainLayout)
+    {
+#ifdef VBOX_WS_MAC
+        m_pMainLayout->setContentsMargins(5 /* since there is always a button */, 0, 10 /* standard */, 0);
+        m_pMainLayout->setSpacing(10);
+#else
+        m_pMainLayout->setContentsMargins(qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 2, 0,
+                                          qApp->style()->pixelMetric(QStyle::PM_LayoutRightMargin) / 2,
+                                          qApp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin) / 2);
+        m_pMainLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing));
+#endif
+    }
+    m_pCloseButton = new QIToolButton;
+    if (m_pCloseButton)
+    {
+        m_pCloseButton->setIcon(UIIconPool::iconSet(":/close_16px.png"));
+        m_pMainLayout->addWidget(m_pCloseButton, 0, Qt::AlignLeft);
+    }
+}
+
+void UIFileManagerPanel::prepareConnections()
+{
+    if (m_pCloseButton)
+        connect(m_pCloseButton, &QIToolButton::clicked, this, &UIFileManagerPanel::hide);
+}
+
+void UIFileManagerPanel::retranslateUi()
+{
+    if (m_pCloseButton)
+        m_pCloseButton->setToolTip(UIFileManager::tr("Close the pane"));
+}
+
+bool UIFileManagerPanel::eventFilter(QObject *pObject, QEvent *pEvent)
+{
+    Q_UNUSED(pObject);
+    Q_UNUSED(pEvent);
+    /* Dont consume this event. Pass it back to Qt's event system: */
+    return false;
+}
+
+void UIFileManagerPanel::showEvent(QShowEvent *pEvent)
+{
+    QWidget::showEvent(pEvent);
+}
+
+void UIFileManagerPanel::hideEvent(QHideEvent *pEvent)
+{
+    /* Get focused widget: */
+    QWidget *pFocus = QApplication::focusWidget();
+    /* If focus-widget is valid and child-widget of search-panel,
+     * focus next child-widget in line: */
+    if (pFocus && pFocus->parent() == this)
+        focusNextPrevChild(true);
+    if (m_pFileManager)
+        m_pFileManager->hidePanel(this);
+
+    QWidget::hideEvent(pEvent);
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerPanel.h	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerPanel.h	(revision 76177)
@@ -0,0 +1,75 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVMLogViewer class declaration.
+ */
+
+/*
+ * Copyright (C) 2010-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIFileManagerPanel_h___
+#define ___UIFileManagerPanel_h___
+
+/* Qt includes: */
+#include <QWidget>
+#include <QKeySequence>
+/* GUI includes: */
+#include "QIWithRetranslateUI.h"
+
+/* Forward declarations: */
+class QHBoxLayout;
+class QPlainTextEdit;
+class QTextDocument;
+class QIToolButton;
+class UIFileManager;
+
+/** QWidget extension acting as the base class for UIVMLogViewerXXXPanel widgets. */
+class UIFileManagerPanel : public QIWithRetranslateUI<QWidget>
+{
+    Q_OBJECT;
+
+public:
+
+    UIFileManagerPanel(UIFileManager *pManagerWidget, QWidget *pParent);
+    void setCloseButtonShortCut(QKeySequence shortCut);
+    virtual QString panelName() const = 0;
+
+protected:
+
+    virtual void prepare();
+    virtual void prepareWidgets();
+    virtual void prepareConnections();
+
+    /* Access functions for children classes. */
+    QHBoxLayout*               mainLayout();
+
+    /** Handles the translation event. */
+    void retranslateUi() /* override */;
+
+    /** Handles Qt @a pEvent, used for keyboard processing. */
+    bool eventFilter(QObject *pObject, QEvent *pEvent);
+    /** Handles the Qt show @a pEvent. */
+    void showEvent(QShowEvent *pEvent);
+    /** Handles the Qt hide @a pEvent. */
+    void hideEvent(QHideEvent *pEvent);
+
+    /* Return the unmodified log. */
+    const QString* logString() const;
+
+private:
+
+    /** Holds the reference to VM Log-Viewer this panel belongs to. */
+    QHBoxLayout   *m_pMainLayout;
+    QIToolButton  *m_pCloseButton;
+    UIFileManager *m_pFileManager;
+};
+
+#endif /* !___UIFileManagerPanel!_h___ */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerSessionPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerSessionPanel.cpp	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerSessionPanel.cpp	(revision 76177)
@@ -0,0 +1,274 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVMLogViewer class implementation.
+ */
+
+/*
+ * Copyright (C) 2010-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QCheckBox>
+# include <QHBoxLayout>
+# include <QMenu>
+# include <QPushButton>
+# include <QSpinBox>
+# include <QTextEdit>
+
+/* GUI includes: */
+# include "QILineEdit.h"
+# include "QIToolButton.h"
+# include "UIIconPool.h"
+# include "UIFileManager.h"
+# include "UIFileManagerSessionPanel.h"
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+/*********************************************************************************************************************************
+*   UIGuestSessionCreateWidget definition.                                                                                   *
+*********************************************************************************************************************************/
+/** A QWidget extension containing text entry fields for password and username and buttons to
+ *  start/stop a guest session. */
+class UIGuestSessionCreateWidget : public QIWithRetranslateUI<QWidget>
+{
+    Q_OBJECT;
+
+signals:
+
+    void sigCreateSession(QString strUserName, QString strPassword);
+    void sigCloseSession();
+
+public:
+
+    UIGuestSessionCreateWidget(QWidget *pParent = 0);
+    /** Disables certain widget after a guest session has been created. */
+    void switchSessionCreateMode();
+    /** Makes sure certain widgets are enabled so that a guest session can be created. */
+    void switchSessionCloseMode();
+
+protected:
+
+    void retranslateUi();
+    void keyPressEvent(QKeyEvent * pEvent);
+
+private slots:
+
+    void sltCreateButtonClick();
+    void sltShowHidePassword(bool flag);
+
+private:
+
+    void          prepareWidgets();
+    QILineEdit   *m_pUserNameEdit;
+    QILineEdit   *m_pPasswordEdit;
+    QPushButton  *m_pCreateButton;
+    QPushButton  *m_pCloseButton;
+    QHBoxLayout  *m_pMainLayout;
+    QCheckBox    *m_pShowPasswordCheckBox;
+};
+
+
+/*********************************************************************************************************************************
+*   UIGuestSessionCreateWidget implementation.                                                                                   *
+*********************************************************************************************************************************/
+
+UIGuestSessionCreateWidget::UIGuestSessionCreateWidget(QWidget *pParent /* = 0 */)
+    : QIWithRetranslateUI<QWidget>(pParent)
+    , m_pUserNameEdit(0)
+    , m_pPasswordEdit(0)
+    , m_pCreateButton(0)
+    , m_pCloseButton(0)
+    , m_pMainLayout(0)
+    , m_pShowPasswordCheckBox(0)
+{
+    prepareWidgets();
+}
+
+void UIGuestSessionCreateWidget::prepareWidgets()
+{
+    m_pMainLayout = new QHBoxLayout(this);
+    if (!m_pMainLayout)
+        return;
+
+    m_pUserNameEdit = new QILineEdit;
+    if (m_pUserNameEdit)
+    {
+        m_pMainLayout->addWidget(m_pUserNameEdit, 2);
+        m_pUserNameEdit->setPlaceholderText("User Name");
+    }
+
+    m_pPasswordEdit = new QILineEdit;
+    if (m_pPasswordEdit)
+    {
+        m_pMainLayout->addWidget(m_pPasswordEdit, 2);
+        m_pPasswordEdit->setPlaceholderText(UIFileManager::tr("Password"));
+        m_pPasswordEdit->setEchoMode(QLineEdit::Password);
+    }
+
+    m_pShowPasswordCheckBox = new QCheckBox;
+    if (m_pShowPasswordCheckBox)
+    {
+        m_pShowPasswordCheckBox->setText(UIFileManager::tr("Show Password"));
+        m_pMainLayout->addWidget(m_pShowPasswordCheckBox);
+        connect(m_pShowPasswordCheckBox, &QCheckBox::toggled,
+                this, &UIGuestSessionCreateWidget::sltShowHidePassword);
+    }
+
+    m_pCreateButton = new QPushButton;
+    if (m_pCreateButton)
+    {
+        m_pMainLayout->addWidget(m_pCreateButton);
+        connect(m_pCreateButton, &QPushButton::clicked, this, &UIGuestSessionCreateWidget::sltCreateButtonClick);
+    }
+
+    m_pCloseButton = new QPushButton;
+    if (m_pCloseButton)
+    {
+        m_pMainLayout->addWidget(m_pCloseButton);
+        connect(m_pCloseButton, &QPushButton::clicked, this, &UIGuestSessionCreateWidget::sigCloseSession);
+    }
+    m_pMainLayout->insertStretch(-1, 1);
+    retranslateUi();
+}
+
+void UIGuestSessionCreateWidget::sltCreateButtonClick()
+{
+    if (m_pUserNameEdit && m_pPasswordEdit)
+        emit sigCreateSession(m_pUserNameEdit->text(), m_pPasswordEdit->text());
+}
+
+void UIGuestSessionCreateWidget::sltShowHidePassword(bool flag)
+{
+    if (!m_pPasswordEdit)
+        return;
+    if (flag)
+        m_pPasswordEdit->setEchoMode(QLineEdit::Normal);
+    else
+        m_pPasswordEdit->setEchoMode(QLineEdit::Password);
+}
+
+void UIGuestSessionCreateWidget::retranslateUi()
+{
+    if (m_pUserNameEdit)
+    {
+        m_pUserNameEdit->setToolTip(UIFileManager::tr("User name to authenticate session creation"));
+        m_pUserNameEdit->setPlaceholderText(UIFileManager::tr("User Name"));
+
+    }
+    if (m_pPasswordEdit)
+    {
+        m_pPasswordEdit->setToolTip(UIFileManager::tr("Password to authenticate session creation"));
+        m_pPasswordEdit->setPlaceholderText(UIFileManager::tr("Password"));
+    }
+
+    if (m_pCreateButton)
+        m_pCreateButton->setText(UIFileManager::tr("Create Session"));
+    if (m_pCloseButton)
+        m_pCloseButton->setText(UIFileManager::tr("Close Session"));
+}
+
+void UIGuestSessionCreateWidget::keyPressEvent(QKeyEvent * pEvent)
+{
+    /* Emit sigCreateSession upon enter press: */
+    if (pEvent->key() == Qt::Key_Enter || pEvent->key() == Qt::Key_Return)
+    {
+        if ((m_pUserNameEdit && m_pUserNameEdit->hasFocus()) ||
+            (m_pPasswordEdit && m_pPasswordEdit->hasFocus()))
+            sigCreateSession(m_pUserNameEdit->text(), m_pPasswordEdit->text());
+    }
+    QWidget::keyPressEvent(pEvent);
+}
+
+void UIGuestSessionCreateWidget::switchSessionCreateMode()
+{
+    if (m_pUserNameEdit)
+        m_pUserNameEdit->setEnabled(true);
+    if (m_pPasswordEdit)
+        m_pPasswordEdit->setEnabled(true);
+    if (m_pCreateButton)
+        m_pCreateButton->setEnabled(true);
+    if (m_pCloseButton)
+        m_pCloseButton->setEnabled(false);
+}
+
+void UIGuestSessionCreateWidget::switchSessionCloseMode()
+{
+    if (m_pUserNameEdit)
+        m_pUserNameEdit->setEnabled(false);
+    if (m_pPasswordEdit)
+        m_pPasswordEdit->setEnabled(false);
+    if (m_pCreateButton)
+        m_pCreateButton->setEnabled(false);
+    if (m_pCloseButton)
+        m_pCloseButton->setEnabled(true);
+}
+
+
+/*********************************************************************************************************************************
+*   UIFileManagerSessionPanel implementation.                                                                        *
+*********************************************************************************************************************************/
+
+UIFileManagerSessionPanel::UIFileManagerSessionPanel(UIFileManager *pManagerWidget, QWidget *pParent)
+    : UIFileManagerPanel(pManagerWidget, pParent)
+    , m_pSessionCreateWidget(0)
+{
+    prepare();
+}
+
+void UIFileManagerSessionPanel::switchSessionCloseMode()
+{
+    if (m_pSessionCreateWidget)
+        m_pSessionCreateWidget->switchSessionCloseMode();
+}
+
+void UIFileManagerSessionPanel::switchSessionCreateMode()
+{
+    if (m_pSessionCreateWidget)
+        m_pSessionCreateWidget->switchSessionCreateMode();
+}
+
+QString UIFileManagerSessionPanel::panelName() const
+{
+    return "SessionPanel";
+}
+
+void UIFileManagerSessionPanel::prepareWidgets()
+{
+    if (!mainLayout())
+        return;
+    m_pSessionCreateWidget = new UIGuestSessionCreateWidget;
+    if (m_pSessionCreateWidget)
+        mainLayout()->addWidget(m_pSessionCreateWidget);
+}
+
+void UIFileManagerSessionPanel::prepareConnections()
+{
+    if (m_pSessionCreateWidget)
+    {
+        connect(m_pSessionCreateWidget, &UIGuestSessionCreateWidget::sigCreateSession,
+                this, &UIFileManagerSessionPanel::sigCreateSession);
+        connect(m_pSessionCreateWidget, &UIGuestSessionCreateWidget::sigCloseSession,
+                this, &UIFileManagerSessionPanel::sigCloseSession);
+    }
+}
+
+void UIFileManagerSessionPanel::retranslateUi()
+{
+    UIFileManagerPanel::retranslateUi();
+
+}
+
+#include "UIFileManagerSessionPanel.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerSessionPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerSessionPanel.h	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerSessionPanel.h	(revision 76177)
@@ -0,0 +1,60 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVMLogViewer class declaration.
+ */
+
+/*
+ * Copyright (C) 2010-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIFileManagerSessionPanel_h___
+#define ___UIFileManagerSessionPanel_h___
+
+/* GUI includes: */
+#include "UIFileManagerPanel.h"
+
+/* Forward declarations: */
+class QTextEdit;
+class UIFileManager;
+class UIGuestSessionCreateWidget;
+
+/** UIFileManagerPanel extension providing GUI for creating/stopping a guest session. */
+class UIFileManagerSessionPanel : public UIFileManagerPanel
+{
+    Q_OBJECT;
+
+public:
+
+    UIFileManagerSessionPanel(UIFileManager *pManagerWidget, QWidget *pParent);
+    /** @name Enable/disable member widget wrt. guest session status.
+      * @{ */
+        void switchSessionCloseMode();
+        void switchSessionCreateMode();
+    /** @} */
+    virtual QString panelName() const /* override */;
+
+signals:
+
+    void sigCreateSession(QString strUserName, QString strPassword);
+    void sigCloseSession();
+
+protected:
+
+    virtual void prepareWidgets() /* override */;
+    virtual void prepareConnections() /* override */;
+    void retranslateUi();
+
+private:
+
+    UIGuestSessionCreateWidget *m_pSessionCreateWidget;
+};
+
+#endif /* !___UIFileManagerSessionPanel_h___ */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerTable.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerTable.cpp	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerTable.cpp	(revision 76177)
@@ -0,0 +1,1564 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIFileManagerTable class implementation.
+ */
+
+/*
+ * Copyright (C) 2016-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifdef VBOX_WITH_PRECOMPILED_HEADERS
+# include <precomp.h>
+#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+/* Qt includes: */
+# include <QAction>
+# include <QComboBox>
+# include <QCheckBox>
+# include <QDateTime>
+# include <QDir>
+# include <QHeaderView>
+# include <QItemDelegate>
+# include <QGridLayout>
+# include <QMenu>
+# include <QSortFilterProxyModel>
+# include <QTextEdit>
+# include <QPushButton>
+
+/* GUI includes: */
+# include "QIDialog.h"
+# include "QIDialogButtonBox.h"
+# include "QILabel.h"
+# include "QILineEdit.h"
+# include "QIMessageBox.h"
+# include "VBoxGlobal.h"
+# include "UIActionPool.h"
+# include "UIErrorString.h"
+# include "UIFileManagerGuestTable.h"
+# include "UIIconPool.h"
+# include "UIFileManagerTable.h"
+# include "UIFileManager.h"
+# include "UIFileManagerModel.h"
+# include "UIToolBar.h"
+
+/* COM includes: */
+# include "CFsObjInfo.h"
+# include "CGuestFsObjInfo.h"
+# include "CGuestDirectory.h"
+# include "CProgress.h"
+
+#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
+
+
+
+/*********************************************************************************************************************************
+*   UIGuestControlFileView definition.                                                                                           *
+*********************************************************************************************************************************/
+
+/** Using QITableView causes the following problem when I click on the table items
+    Qt WARNING: Cannot creat accessible child interface for object:  UIGuestControlFileView.....
+    so for now subclass QTableView */
+class UIGuestControlFileView : public QTableView
+{
+
+    Q_OBJECT;
+
+signals:
+
+    void sigSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected);
+
+public:
+
+    UIGuestControlFileView(QWidget * parent = 0);
+    bool hasSelection() const;
+
+protected:
+
+    virtual void selectionChanged(const QItemSelection & selected, const QItemSelection & deselected) /*override */;
+
+private:
+
+    void configure();
+    QWidget *m_pParent;
+};
+
+
+/*********************************************************************************************************************************
+*   UIFileDelegate definition.                                                                                                   *
+*********************************************************************************************************************************/
+/** A QItemDelegate child class to disable dashed lines drawn around selected cells in QTableViews */
+class UIFileDelegate : public QItemDelegate
+{
+
+    Q_OBJECT;
+
+protected:
+
+    virtual void drawFocus ( QPainter * /*painter*/, const QStyleOptionViewItem & /*option*/, const QRect & /*rect*/ ) const {}
+
+};
+
+
+/*********************************************************************************************************************************
+*   UStringInputDialog definition.                                                                                          *
+*********************************************************************************************************************************/
+
+/** A QIDialog child including a line edit whose text exposed when the dialog is accepted */
+class UIStringInputDialog : public QIDialog
+{
+
+    Q_OBJECT;
+
+public:
+
+    UIStringInputDialog(QWidget *pParent = 0, Qt::WindowFlags flags = 0);
+    QString getString() const;
+
+private:
+
+    QILineEdit      *m_pLineEdit;
+
+};
+
+
+/*********************************************************************************************************************************
+*   UIFileDeleteConfirmationDialog definition.                                                                                   *
+*********************************************************************************************************************************/
+
+/** A QIDialog child including a line edit whose text exposed when the dialog is accepted */
+class UIFileDeleteConfirmationDialog : public QIDialog
+{
+
+    Q_OBJECT;
+
+public:
+
+    UIFileDeleteConfirmationDialog(QWidget *pParent = 0, Qt::WindowFlags flags = 0);
+    /** Returns whether m_pAskNextTimeCheckBox is checked or not. */
+    bool askDeleteConfirmationNextTime() const;
+
+private:
+
+    QCheckBox *m_pAskNextTimeCheckBox;
+    QILabel   *m_pQuestionLabel;
+
+};
+
+
+/*********************************************************************************************************************************
+*   UIHostDirectoryDiskUsageComputer implementation.                                                                             *
+*********************************************************************************************************************************/
+
+UIDirectoryDiskUsageComputer::UIDirectoryDiskUsageComputer(QObject *parent, QStringList pathList)
+    :QThread(parent)
+    , m_pathList(pathList)
+    , m_fOkToContinue(true)
+{
+}
+
+void UIDirectoryDiskUsageComputer::run()
+{
+    for (int i = 0; i < m_pathList.size(); ++i)
+        directoryStatisticsRecursive(m_pathList[i], m_resultStatistics);
+}
+
+void UIDirectoryDiskUsageComputer::stopRecursion()
+{
+    m_mutex.lock();
+    m_fOkToContinue = false;
+    m_mutex.unlock();
+}
+
+bool UIDirectoryDiskUsageComputer::isOkToContinue() const
+{
+    return m_fOkToContinue;
+}
+
+
+/*********************************************************************************************************************************
+*   UIPathOperations implementation.                                                                                             *
+*********************************************************************************************************************************/
+
+const QChar UIPathOperations::delimiter = QChar('/');
+const QChar UIPathOperations::dosDelimiter = QChar('\\');
+
+/* static */ QString UIPathOperations::removeMultipleDelimiters(const QString &path)
+{
+    QString newPath(path);
+    QString doubleDelimiter(2, delimiter);
+
+    while (newPath.contains(doubleDelimiter) && !newPath.isEmpty())
+        newPath = newPath.replace(doubleDelimiter, delimiter);
+    return newPath;
+}
+
+/* static */ QString UIPathOperations::removeTrailingDelimiters(const QString &path)
+{
+    if (path.isNull() || path.isEmpty())
+        return QString();
+    QString newPath(path);
+    /* Make sure for we dont have any trailing delimiters: */
+    while (newPath.length() > 1 && newPath.at(newPath.length() - 1) == UIPathOperations::delimiter)
+        newPath.chop(1);
+    return newPath;
+}
+
+/* static */ QString UIPathOperations::addTrailingDelimiters(const QString &path)
+{
+    if (path.isNull() || path.isEmpty())
+        return QString();
+    QString newPath(path);
+    while (newPath.length() > 1 && newPath.at(newPath.length() - 1) != UIPathOperations::delimiter)
+        newPath += UIPathOperations::delimiter;
+    return newPath;
+}
+
+/* static */ QString UIPathOperations::addStartDelimiter(const QString &path)
+{
+    if (path.isEmpty())
+        return QString(path);
+    QString newPath(path);
+
+    if (doesPathStartWithDriveLetter(newPath))
+    {
+        if (newPath.at(newPath.length() - 1) != delimiter)
+            newPath += delimiter;
+        return newPath;
+    }
+    if (newPath.at(0) != delimiter)
+        newPath.insert(0, delimiter);
+    return newPath;
+}
+
+/* static */ QString UIPathOperations::sanitize(const QString &path)
+{
+    //return addStartDelimiter(removeTrailingDelimiters(removeMultipleDelimiters(path)));
+    QString newPath = addStartDelimiter(removeTrailingDelimiters(removeMultipleDelimiters(path))).replace(dosDelimiter, delimiter);
+    return newPath;
+}
+
+/* static */ QString UIPathOperations::mergePaths(const QString &path, const QString &baseName)
+{
+    QString newBase(baseName);
+    newBase = newBase.remove(delimiter);
+
+    /* make sure we have one and only one trailing '/': */
+    QString newPath(sanitize(path));
+    if(newPath.isEmpty())
+        newPath = delimiter;
+    if(newPath.at(newPath.length() - 1) != delimiter)
+        newPath += UIPathOperations::delimiter;
+    newPath += newBase;
+    return sanitize(newPath);
+}
+
+/* static */ QString UIPathOperations::getObjectName(const QString &path)
+{
+    if (path.length() <= 1)
+        return QString(path);
+
+    QString strTemp(sanitize(path));
+    if (strTemp.length() < 2)
+        return strTemp;
+    int lastSlashPosition = strTemp.lastIndexOf(UIPathOperations::delimiter);
+    if (lastSlashPosition == -1)
+        return QString();
+    return strTemp.right(strTemp.length() - lastSlashPosition - 1);
+}
+
+/* static */ QString UIPathOperations::getPathExceptObjectName(const QString &path)
+{
+    if (path.length() <= 1)
+        return QString(path);
+
+    QString strTemp(sanitize(path));
+    int lastSlashPosition = strTemp.lastIndexOf(UIPathOperations::delimiter);
+    if (lastSlashPosition == -1)
+        return QString();
+    return strTemp.left(lastSlashPosition + 1);
+}
+
+/* static */ QString UIPathOperations::constructNewItemPath(const QString &previousPath, const QString &newBaseName)
+{
+    if (previousPath.length() <= 1)
+         return QString(previousPath);
+    return sanitize(mergePaths(getPathExceptObjectName(previousPath), newBaseName));
+}
+
+/* static */ QStringList UIPathOperations::pathTrail(const QString &path)
+{
+    QStringList pathList = path.split(UIPathOperations::delimiter, QString::SkipEmptyParts);
+    if (!pathList.isEmpty() && doesPathStartWithDriveLetter(pathList[0]))
+    {
+        pathList[0] = addTrailingDelimiters(pathList[0]);
+    }
+    return pathList;
+}
+
+/* static */ bool UIPathOperations::doesPathStartWithDriveLetter(const QString &path)
+{
+    if (path.length() < 2)
+        return false;
+    /* search for ':' with the path: */
+    if (!path[0].isLetter())
+        return false;
+    if (path[1] != ':')
+        return false;
+    return true;
+}
+
+
+/*********************************************************************************************************************************
+*   UIGuestControlFileView implementation.                                                                                       *
+*********************************************************************************************************************************/
+
+UIGuestControlFileView::UIGuestControlFileView(QWidget *parent)
+    :QTableView(parent)
+    , m_pParent(parent)
+{
+    configure();
+}
+
+void UIGuestControlFileView::configure()
+{
+    setContextMenuPolicy(Qt::CustomContextMenu);
+    setShowGrid(false);
+    setSelectionBehavior(QAbstractItemView::SelectRows);
+    verticalHeader()->setVisible(false);
+    setEditTriggers(QAbstractItemView::NoEditTriggers);
+    /* Minimize the row height: */
+    verticalHeader()->setDefaultSectionSize(verticalHeader()->minimumSectionSize());
+    setAlternatingRowColors(true);
+    installEventFilter(m_pParent);
+}
+
+bool UIGuestControlFileView::hasSelection() const
+{
+    QItemSelectionModel *pSelectionModel =  selectionModel();
+    if (!pSelectionModel)
+        return false;
+    return pSelectionModel->hasSelection();
+}
+
+void UIGuestControlFileView::selectionChanged(const QItemSelection & selected, const QItemSelection & deselected)
+{
+    emit sigSelectionChanged(selected, deselected);
+    QTableView::selectionChanged(selected, deselected);
+}
+
+
+/*********************************************************************************************************************************
+*   UIFileStringInputDialog implementation.                                                                                      *
+*********************************************************************************************************************************/
+
+UIStringInputDialog::UIStringInputDialog(QWidget *pParent /* = 0 */, Qt::WindowFlags flags /* = 0 */)
+    :QIDialog(pParent, flags)
+{
+    QVBoxLayout *layout = new QVBoxLayout(this);
+    m_pLineEdit = new QILineEdit(this);
+    layout->addWidget(m_pLineEdit);
+
+    QIDialogButtonBox *pButtonBox =
+        new QIDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
+    layout->addWidget(pButtonBox);
+    connect(pButtonBox, &QIDialogButtonBox::accepted, this, &UIStringInputDialog::accept);
+    connect(pButtonBox, &QIDialogButtonBox::rejected, this, &UIStringInputDialog::reject);
+}
+
+QString UIStringInputDialog::getString() const
+{
+    if (!m_pLineEdit)
+        return QString();
+    return m_pLineEdit->text();
+}
+
+
+/*********************************************************************************************************************************
+*   UIPropertiesDialog implementation.                                                                                           *
+*********************************************************************************************************************************/
+
+UIPropertiesDialog::UIPropertiesDialog(QWidget *pParent, Qt::WindowFlags flags)
+    :QIDialog(pParent, flags)
+    , m_pMainLayout(new QVBoxLayout)
+    , m_pInfoEdit(new QTextEdit)
+{
+    setLayout(m_pMainLayout);
+
+    if (m_pMainLayout)
+        m_pMainLayout->addWidget(m_pInfoEdit);
+    if (m_pInfoEdit)
+    {
+        m_pInfoEdit->setReadOnly(true);
+        m_pInfoEdit->setFrameStyle(QFrame::NoFrame);
+    }
+    QIDialogButtonBox *pButtonBox =
+        new QIDialogButtonBox(QDialogButtonBox::Ok, Qt::Horizontal, this);
+    m_pMainLayout->addWidget(pButtonBox);
+    connect(pButtonBox, &QIDialogButtonBox::accepted, this, &UIStringInputDialog::accept);
+}
+
+void UIPropertiesDialog::setPropertyText(const QString &strProperty)
+{
+    if (!m_pInfoEdit)
+        return;
+    m_strProperty = strProperty;
+    m_pInfoEdit->setHtml(strProperty);
+}
+
+void UIPropertiesDialog::addDirectoryStatistics(UIDirectoryStatistics directoryStatistics)
+{
+    if (!m_pInfoEdit)
+        return;
+    // QString propertyString = m_pInfoEdit->toHtml();
+    // propertyString += "<b>Total Size:</b> " + QString::number(directoryStatistics.m_totalSize) + QString(" bytes");
+    // if (directoryStatistics.m_totalSize >= UIFileManagerTable::m_iKiloByte)
+    //     propertyString += " (" + UIFileManagerTable::humanReadableSize(directoryStatistics.m_totalSize) + ")";
+    // propertyString += "<br/>";
+    // propertyString += "<b>File Count:</b> " + QString::number(directoryStatistics.m_uFileCount);
+
+    // m_pInfoEdit->setHtml(propertyString);
+
+    QString detailsString(m_strProperty);
+    detailsString += "<br/>";
+    detailsString += "<b>" + UIFileManager::tr("Total Size") + "</b> " +
+        QString::number(directoryStatistics.m_totalSize) + UIFileManager::tr(" bytes");
+    if (directoryStatistics.m_totalSize >= UIFileManagerTable::m_iKiloByte)
+        detailsString += " (" + UIFileManagerTable::humanReadableSize(directoryStatistics.m_totalSize) + ")";
+    detailsString += "<br/>";
+
+    detailsString += "<b>" + UIFileManager::tr("File Count") + ":</b> " +
+        QString::number(directoryStatistics.m_uFileCount);
+
+    m_pInfoEdit->setHtml(detailsString);
+}
+
+
+/*********************************************************************************************************************************
+*   UIDirectoryStatistics implementation.                                                                                        *
+*********************************************************************************************************************************/
+
+UIDirectoryStatistics::UIDirectoryStatistics()
+    : m_totalSize(0)
+    , m_uFileCount(0)
+    , m_uDirectoryCount(0)
+    , m_uSymlinkCount(0)
+{
+}
+
+
+/*********************************************************************************************************************************
+*   UIFileTableItem implementation.                                                                                              *
+*********************************************************************************************************************************/
+
+UIFileTableItem::UIFileTableItem(const QVector<QVariant> &data,
+                                 UIFileTableItem *parent, FileObjectType type)
+    : m_itemData(data)
+    , m_parentItem(parent)
+    , m_bIsOpened(false)
+    , m_isTargetADirectory(false)
+    , m_type(type)
+    , m_isDriveItem(false)
+{
+}
+
+UIFileTableItem::~UIFileTableItem()
+{
+    qDeleteAll(m_childItems);
+    m_childItems.clear();
+}
+
+void UIFileTableItem::appendChild(UIFileTableItem *item)
+{
+    if (!item)
+        return;
+    m_childItems.append(item);
+    m_childMap.insert(item->name(), item);
+}
+
+UIFileTableItem *UIFileTableItem::child(int row) const
+{
+    return m_childItems.value(row);
+}
+
+UIFileTableItem *UIFileTableItem::child(const QString &path) const
+{
+    if (!m_childMap.contains(path))
+        return 0;
+    return m_childMap.value(path);
+}
+
+int UIFileTableItem::childCount() const
+{
+    return m_childItems.count();
+}
+
+int UIFileTableItem::columnCount() const
+{
+    return m_itemData.count();
+}
+
+QVariant UIFileTableItem::data(int column) const
+{
+    return m_itemData.value(column);
+}
+
+QString UIFileTableItem::name() const
+{
+    if (m_itemData.isEmpty() || !m_itemData[0].canConvert(QMetaType::QString))
+        return QString();
+    return m_itemData[0].toString();
+}
+
+void UIFileTableItem::setData(const QVariant &data, int index)
+{
+    if (index >= m_itemData.length())
+        return;
+    m_itemData[index] = data;
+}
+
+UIFileTableItem *UIFileTableItem::parentItem()
+{
+    return m_parentItem;
+}
+
+int UIFileTableItem::row() const
+{
+    if (m_parentItem)
+        return m_parentItem->m_childItems.indexOf(const_cast<UIFileTableItem*>(this));
+    return 0;
+}
+
+bool UIFileTableItem::isDirectory() const
+{
+    return m_type == FileObjectType_Directory;
+}
+
+bool UIFileTableItem::isSymLink() const
+{
+    return m_type == FileObjectType_SymLink;
+}
+
+bool UIFileTableItem::isFile() const
+{
+    return m_type == FileObjectType_File;
+}
+
+void UIFileTableItem::clearChildren()
+{
+    qDeleteAll(m_childItems);
+    m_childItems.clear();
+    m_childMap.clear();
+}
+
+bool UIFileTableItem::isOpened() const
+{
+    return m_bIsOpened;
+}
+
+void UIFileTableItem::setIsOpened(bool flag)
+{
+    m_bIsOpened = flag;
+}
+
+const QString  &UIFileTableItem::path() const
+{
+    return m_strPath;
+}
+
+void UIFileTableItem::setPath(const QString &path)
+{
+    if (path.isNull() || path.isEmpty())
+        return;
+    m_strPath = path;
+    UIPathOperations::removeTrailingDelimiters(m_strPath);
+}
+
+bool UIFileTableItem::isUpDirectory() const
+{
+    if (!isDirectory())
+        return false;
+    if (data(0) == UIFileManagerModel::strUpDirectoryString)
+        return true;
+    return false;
+}
+
+FileObjectType UIFileTableItem::type() const
+{
+    return m_type;
+}
+
+const QString &UIFileTableItem::targetPath() const
+{
+    return m_strTargetPath;
+}
+
+void UIFileTableItem::setTargetPath(const QString &path)
+{
+    m_strTargetPath = path;
+}
+
+bool UIFileTableItem::isSymLinkToADirectory() const
+{
+    return m_isTargetADirectory;
+}
+
+void UIFileTableItem::setIsSymLinkToADirectory(bool flag)
+{
+    m_isTargetADirectory = flag;
+}
+
+bool UIFileTableItem::isSymLinkToAFile() const
+{
+    return isSymLink() && !m_isTargetADirectory;
+}
+
+void UIFileTableItem::setIsDriveItem(bool flag)
+{
+    m_isDriveItem = flag;
+}
+
+bool UIFileTableItem::isDriveItem() const
+{
+    return m_isDriveItem;
+}
+
+/*********************************************************************************************************************************
++*   UIFileDeleteConfirmationDialog implementation.                                                                                *
++*********************************************************************************************************************************/
+
+UIFileDeleteConfirmationDialog::UIFileDeleteConfirmationDialog(QWidget *pParent /* = 0 */, Qt::WindowFlags flags /* = 0 */)
+    :QIDialog(pParent, flags)
+    , m_pAskNextTimeCheckBox(0)
+    , m_pQuestionLabel(0)
+{
+    QVBoxLayout *pLayout = new QVBoxLayout(this);
+
+    m_pQuestionLabel = new QILabel;
+    if (m_pQuestionLabel)
+    {
+        pLayout->addWidget(m_pQuestionLabel);
+        m_pQuestionLabel->setText(UIFileManager::tr("Delete the selected file(s) and/or folder(s)"));
+    }
+
+    QIDialogButtonBox *pButtonBox =
+        new QIDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
+    if (pButtonBox)
+    {
+        pLayout->addWidget(pButtonBox, 0, Qt::AlignCenter);
+        connect(pButtonBox, &QIDialogButtonBox::accepted, this, &UIStringInputDialog::accept);
+        connect(pButtonBox, &QIDialogButtonBox::rejected, this, &UIStringInputDialog::reject);
+    }
+
+    m_pAskNextTimeCheckBox = new QCheckBox;
+
+    if (m_pAskNextTimeCheckBox)
+    {
+        UIFileManagerOptions *pFileManagerOptions = UIFileManagerOptions::instance();
+        if (pFileManagerOptions)
+            m_pAskNextTimeCheckBox->setChecked(pFileManagerOptions->bAskDeleteConfirmation);
+
+        pLayout->addWidget(m_pAskNextTimeCheckBox);
+        m_pAskNextTimeCheckBox->setText(UIFileManager::tr("Ask for this confirmation next time"));
+        m_pAskNextTimeCheckBox->setToolTip(UIFileManager::tr("Delete confirmation can be "
+                                                                         "disabled/enabled also from the Options panel."));
+    }
+}
+
+bool UIFileDeleteConfirmationDialog::askDeleteConfirmationNextTime() const
+{
+    if (!m_pAskNextTimeCheckBox)
+        return true;
+    return m_pAskNextTimeCheckBox->isChecked();
+}
+
+
+/*********************************************************************************************************************************
+*   UIFileManagerTable implementation.                                                                                      *
+*********************************************************************************************************************************/
+const unsigned UIFileManagerTable::m_iKiloByte = 1024; /**< Our kilo bytes are a power of two! (bird) */
+UIFileManagerTable::UIFileManagerTable(UIActionPool *pActionPool, QWidget *pParent /* = 0 */)
+    :QIWithRetranslateUI<QWidget>(pParent)
+    , m_eFileOperationType(FileOperationType_None)
+    , m_pRootItem(0)
+    , m_pLocationLabel(0)
+    , m_pPropertiesDialog(0)
+    , m_pActionPool(pActionPool)
+    , m_pToolBar(0)
+    , m_pModel(0)
+    , m_pView(0)
+    , m_pProxyModel(0)
+    , m_pMainLayout(0)
+    , m_pLocationComboBox(0)
+    , m_pWarningLabel(0)
+{
+    prepareObjects();
+}
+
+UIFileManagerTable::~UIFileManagerTable()
+{
+    delete m_pRootItem;
+}
+
+void UIFileManagerTable::reset()
+{
+    if (m_pModel)
+        m_pModel->beginReset();
+    delete m_pRootItem;
+    m_pRootItem = 0;
+    if (m_pModel)
+        m_pModel->endReset();
+    if (m_pLocationComboBox)
+    {
+        disconnect(m_pLocationComboBox, static_cast<void(QComboBox::*)(const QString&)>(&QComboBox::currentIndexChanged),
+                   this, &UIFileManagerTable::sltLocationComboCurrentChange);
+        m_pLocationComboBox->clear();
+        connect(m_pLocationComboBox, static_cast<void(QComboBox::*)(const QString&)>(&QComboBox::currentIndexChanged),
+                this, &UIFileManagerTable::sltLocationComboCurrentChange);
+    }
+}
+
+void UIFileManagerTable::emitLogOutput(const QString& strOutput, FileManagerLogType eLogType)
+{
+    emit sigLogOutput(strOutput, eLogType);
+}
+
+void UIFileManagerTable::prepareObjects()
+{
+    m_pMainLayout = new QGridLayout();
+    if (!m_pMainLayout)
+        return;
+    m_pMainLayout->setSpacing(0);
+    m_pMainLayout->setContentsMargins(0, 0, 0, 0);
+    setLayout(m_pMainLayout);
+
+    m_pToolBar = new UIToolBar;
+    if (m_pToolBar)
+    {
+        m_pMainLayout->addWidget(m_pToolBar, 0, 0, 1, 5);
+    }
+
+    m_pLocationLabel = new QILabel;
+    if (m_pLocationLabel)
+    {
+        m_pMainLayout->addWidget(m_pLocationLabel, 1, 0, 1, 1);
+    }
+
+    m_pLocationComboBox = new QComboBox;
+    if (m_pLocationComboBox)
+    {
+        m_pMainLayout->addWidget(m_pLocationComboBox, 1, 1, 1, 4);
+        m_pLocationComboBox->setEditable(false);
+        connect(m_pLocationComboBox, static_cast<void(QComboBox::*)(const QString&)>(&QComboBox::currentIndexChanged),
+                this, &UIFileManagerTable::sltLocationComboCurrentChange);
+    }
+
+
+    m_pModel = new UIFileManagerModel(this);
+    if (!m_pModel)
+        return;
+
+    m_pProxyModel = new UIGuestControlFileProxyModel(this);
+    if (!m_pProxyModel)
+        return;
+    m_pProxyModel->setSourceModel(m_pModel);
+
+    m_pView = new UIGuestControlFileView(this);
+    if (m_pView)
+    {
+        m_pMainLayout->addWidget(m_pView, 2, 0, 5, 5);
+
+        QHeaderView *pHorizontalHeader = m_pView->horizontalHeader();
+        if (pHorizontalHeader)
+            pHorizontalHeader->setHighlightSections(false);
+
+        m_pView->setModel(m_pProxyModel);
+        m_pView->setItemDelegate(new UIFileDelegate);
+        m_pView->setSortingEnabled(true);
+        m_pView->sortByColumn(0, Qt::AscendingOrder);
+
+        connect(m_pView, &UIGuestControlFileView::doubleClicked,
+                this, &UIFileManagerTable::sltItemDoubleClicked);
+        connect(m_pView, &UIGuestControlFileView::clicked,
+                this, &UIFileManagerTable::sltItemClicked);
+        connect(m_pView, &UIGuestControlFileView::sigSelectionChanged,
+                this, &UIFileManagerTable::sltSelectionChanged);
+        connect(m_pView, &UIGuestControlFileView::customContextMenuRequested,
+                this, &UIFileManagerTable::sltCreateFileViewContextMenu);
+
+    }
+    m_pWarningLabel = new QILabel(this);
+    if (m_pWarningLabel)
+    {
+        m_pMainLayout->addWidget(m_pWarningLabel, 2, 0, 5, 5);
+        QFont labelFont = m_pWarningLabel->font();
+        float fSizeMultiplier = 2.5;
+        if (labelFont.pointSize() != -1)
+            labelFont.setPointSize(fSizeMultiplier * labelFont.pointSize());
+        else
+            labelFont.setPixelSize(fSizeMultiplier * labelFont.pixelSize());
+        labelFont.setBold(true);
+        m_pWarningLabel->setFont(labelFont);
+        m_pWarningLabel->setAlignment(Qt::AlignCenter | Qt::AlignVCenter);
+        m_pWarningLabel->setWordWrap(true);
+    }
+    m_pWarningLabel->setVisible(!isEnabled());
+    m_pView->setVisible(isEnabled());
+
+    m_pSearchLineEdit = new QILineEdit;
+    if (m_pSearchLineEdit)
+    {
+        m_pMainLayout->addWidget(m_pSearchLineEdit, 8, 0, 1, 5);
+        m_pSearchLineEdit->hide();
+        m_pSearchLineEdit->setClearButtonEnabled(true);
+        connect(m_pSearchLineEdit, &QLineEdit::textChanged,
+                this, &UIFileManagerTable::sltSearchTextChanged);
+    }
+}
+
+void UIFileManagerTable::updateCurrentLocationEdit(const QString& strLocation)
+{
+    if (!m_pLocationComboBox)
+        return;
+    int itemIndex = m_pLocationComboBox->findText(strLocation,
+                                                  Qt::MatchExactly | Qt::MatchCaseSensitive);
+    if (itemIndex == -1)
+    {
+        m_pLocationComboBox->insertItem(m_pLocationComboBox->count(), strLocation);
+        itemIndex = m_pLocationComboBox->count() - 1;
+    }
+    m_pLocationComboBox->setCurrentIndex(itemIndex);
+}
+
+void UIFileManagerTable::changeLocation(const QModelIndex &index)
+{
+    if (!index.isValid() || !m_pView)
+        return;
+    m_pView->setRootIndex(m_pProxyModel->mapFromSource(index));
+    m_pView->clearSelection();
+
+    UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
+    if (item)
+    {
+        updateCurrentLocationEdit(item->path());
+    }
+    /** @todo check if we really need this and if not remove it */
+    //m_pModel->signalUpdate();
+}
+
+void UIFileManagerTable::initializeFileTree()
+{
+    if (m_pRootItem)
+        reset();
+
+    /* Root item: */
+    const QString startPath("/");
+    QVector<QVariant> headData;
+    headData.resize(UIFileManagerModelColumn_Max);
+    m_pRootItem = new UIFileTableItem(headData, 0, FileObjectType_Directory);
+    UIFileTableItem* startItem = new UIFileTableItem(createTreeItemData(startPath, 4096, QDateTime(),
+                                                                        "" /* owner */, "" /* permissions */),
+                                                     m_pRootItem, FileObjectType_Directory);
+    startItem->setPath(startPath);
+    m_pRootItem->appendChild(startItem);
+    startItem->setIsOpened(false);
+    populateStartDirectory(startItem);
+
+    m_pModel->signalUpdate();
+    updateCurrentLocationEdit(startPath);
+    m_pView->setRootIndex(m_pProxyModel->mapFromSource(m_pModel->rootIndex()));
+}
+
+void UIFileManagerTable::populateStartDirectory(UIFileTableItem *startItem)
+{
+    determineDriveLetters();
+    if (m_driveLetterList.isEmpty())
+    {
+        /* Read the root directory and get the list: */
+        readDirectory(startItem->path(), startItem, true);
+    }
+    else
+    {
+        for (int i = 0; i < m_driveLetterList.size(); ++i)
+        {
+            UIFileTableItem* driveItem = new UIFileTableItem(createTreeItemData(m_driveLetterList[i], 4096,
+                                                                                QDateTime(), QString(), QString()),
+                                                             startItem, FileObjectType_Directory);
+            driveItem->setPath(m_driveLetterList[i]);
+            startItem->appendChild(driveItem);
+            driveItem->setIsOpened(false);
+            driveItem->setIsDriveItem(true);
+            startItem->setIsOpened(true);
+        }
+    }
+}
+
+void UIFileManagerTable::insertItemsToTree(QMap<QString,UIFileTableItem*> &map,
+                                                UIFileTableItem *parent, bool isDirectoryMap, bool isStartDir)
+{
+    if (parent)
+
+    /* Make sure we have an item representing up directory, and make sure it is not there for the start dir: */
+    if (isDirectoryMap)
+    {
+        if (!map.contains(UIFileManagerModel::strUpDirectoryString)  && !isStartDir)
+        {
+            QVector<QVariant> data;
+            UIFileTableItem *item = new UIFileTableItem(createTreeItemData(UIFileManagerModel::strUpDirectoryString, 4096,
+                                                                           QDateTime(), QString(), QString())
+                                                        , parent, FileObjectType_Directory);
+            item->setIsOpened(false);
+            map.insert(UIFileManagerModel::strUpDirectoryString, item);
+        }
+        else if (map.contains(UIFileManagerModel::strUpDirectoryString)  && isStartDir)
+        {
+            map.remove(UIFileManagerModel::strUpDirectoryString);
+        }
+    }
+    for (QMap<QString,UIFileTableItem*>::const_iterator iterator = map.begin();
+        iterator != map.end(); ++iterator)
+    {
+        if (iterator.key() == "." || iterator.key().isEmpty())
+            continue;
+        parent->appendChild(iterator.value());
+    }
+}
+
+void UIFileManagerTable::sltItemDoubleClicked(const QModelIndex &index)
+{
+    if (!index.isValid() ||  !m_pModel || !m_pView)
+        return;
+    QModelIndex nIndex = m_pProxyModel ? m_pProxyModel->mapToSource(index) : index;
+    goIntoDirectory(nIndex);
+}
+
+void UIFileManagerTable::sltItemClicked(const QModelIndex &index)
+{
+    Q_UNUSED(index);
+    disableSelectionSearch();
+}
+
+void UIFileManagerTable::sltGoUp()
+{
+    if (!m_pView || !m_pModel)
+        return;
+    QModelIndex currentRoot = currentRootIndex();
+
+    if (!currentRoot.isValid())
+        return;
+    if (currentRoot != m_pModel->rootIndex())
+    {
+        QModelIndex parentIndex = currentRoot.parent();
+        if (parentIndex.isValid())
+        {
+            changeLocation(currentRoot.parent());
+            m_pView->selectRow(currentRoot.row());
+        }
+    }
+}
+
+void UIFileManagerTable::sltGoHome()
+{
+    goToHomeDirectory();
+}
+
+void UIFileManagerTable::sltRefresh()
+{
+    refresh();
+}
+
+void UIFileManagerTable::goIntoDirectory(const QModelIndex &itemIndex)
+{
+    if (!m_pModel)
+        return;
+
+    /* Make sure the colum is 0: */
+    QModelIndex index = m_pModel->index(itemIndex.row(), 0, itemIndex.parent());
+    if (!index.isValid())
+        return;
+
+    UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
+    if (!item)
+        return;
+
+    /* check if we need to go up: */
+    if (item->isUpDirectory())
+    {
+        QModelIndex parentIndex = m_pModel->parent(m_pModel->parent(index));
+        if (parentIndex.isValid())
+            changeLocation(parentIndex);
+        return;
+    }
+
+    if (item->isDirectory() || item->isSymLinkToADirectory())
+    {
+        if (!item->isOpened())
+            readDirectory(item->path(),item);
+        changeLocation(index);
+    }
+}
+
+void UIFileManagerTable::goIntoDirectory(const QStringList &pathTrail)
+{
+    UIFileTableItem *parent = getStartDirectoryItem();
+
+    for(int i = 0; i < pathTrail.size(); ++i)
+    {
+        if (!parent)
+            return;
+        /* Make sure parent is already opened: */
+        if (!parent->isOpened())
+            readDirectory(parent->path(), parent, parent == getStartDirectoryItem());
+        /* search the current path item among the parent's children: */
+        UIFileTableItem *item = parent->child(pathTrail.at(i));
+        if (!item)
+            return;
+        parent = item;
+    }
+    if (!parent)
+        return;
+    if (!parent->isOpened())
+        readDirectory(parent->path(), parent, parent == getStartDirectoryItem());
+    goIntoDirectory(parent);
+}
+
+void UIFileManagerTable::goIntoDirectory(UIFileTableItem *item)
+{
+    if (!item || !m_pModel)
+        return;
+    goIntoDirectory(m_pModel->index(item));
+}
+
+UIFileTableItem* UIFileManagerTable::indexData(const QModelIndex &index) const
+{
+    if (!index.isValid())
+        return 0;
+    return static_cast<UIFileTableItem*>(index.internalPointer());
+}
+
+void UIFileManagerTable::refresh()
+{
+    if (!m_pView || !m_pModel)
+        return;
+    QModelIndex currentIndex = currentRootIndex();
+
+    UIFileTableItem *treeItem = indexData(currentIndex);
+    if (!treeItem)
+        return;
+    bool isRootDir = (m_pModel->rootIndex() == currentIndex);
+    m_pModel->beginReset();
+    /* For now we clear the whole subtree (that isrecursively) which is an overkill: */
+    treeItem->clearChildren();
+    if (isRootDir)
+        populateStartDirectory(treeItem);
+    else
+        readDirectory(treeItem->path(), treeItem, isRootDir);
+    m_pModel->endReset();
+    m_pView->setRootIndex(m_pProxyModel->mapFromSource(currentIndex));
+    setSelectionDependentActionsEnabled(m_pView->hasSelection());
+}
+
+void UIFileManagerTable::relist()
+{
+    if (!m_pProxyModel)
+        return;
+    m_pProxyModel->invalidate();
+}
+
+void UIFileManagerTable::sltDelete()
+{
+    if (!checkIfDeleteOK())
+        return;
+
+    if (!m_pView || !m_pModel)
+        return;
+
+    if (!m_pView || !m_pModel)
+        return;
+    QItemSelectionModel *selectionModel =  m_pView->selectionModel();
+    if (!selectionModel)
+        return;
+
+    QModelIndexList selectedItemIndices = selectionModel->selectedRows();
+    for(int i = 0; i < selectedItemIndices.size(); ++i)
+    {
+        QModelIndex index =
+            m_pProxyModel ? m_pProxyModel->mapToSource(selectedItemIndices.at(i)) : selectedItemIndices.at(i);
+        deleteByIndex(index);
+    }
+    /** @todo dont refresh here, just delete the rows and update the table view: */
+    refresh();
+}
+
+void UIFileManagerTable::sltRename()
+{
+    if (!m_pView)
+        return;
+    QItemSelectionModel *selectionModel =  m_pView->selectionModel();
+    if (!selectionModel)
+        return;
+
+    QModelIndexList selectedItemIndices = selectionModel->selectedRows();
+    if (selectedItemIndices.size() == 0)
+        return;
+    QModelIndex modelIndex =
+        m_pProxyModel ? m_pProxyModel->mapToSource(selectedItemIndices.at(0)) : selectedItemIndices.at(0);
+    UIFileTableItem *item = indexData(modelIndex);
+    if (!item || item->isUpDirectory())
+        return;
+    m_pView->edit(selectedItemIndices.at(0));
+}
+
+void UIFileManagerTable::sltCreateNewDirectory()
+{
+    if (!m_pModel || !m_pView)
+        return;
+    QModelIndex currentIndex = currentRootIndex();
+    if (!currentIndex.isValid())
+        return;
+    UIFileTableItem *item = static_cast<UIFileTableItem*>(currentIndex.internalPointer());
+    if (!item)
+        return;
+
+    QString newDirectoryName = getNewDirectoryName();
+    if (newDirectoryName.isEmpty())
+        return;
+
+    if (createDirectory(item->path(), newDirectoryName))
+    {
+        /** @todo instead of refreshing here (an overkill) just add the
+           rows and update the tabel view: */
+        sltRefresh();
+    }
+}
+
+void UIFileManagerTable::sltCopy()
+{
+    m_copyCutBuffer = selectedItemPathList();
+    m_eFileOperationType = FileOperationType_Copy;
+    setPasteActionEnabled(true);
+}
+
+void UIFileManagerTable::sltCut()
+{
+    m_copyCutBuffer = selectedItemPathList();
+    m_eFileOperationType = FileOperationType_Cut;
+    setPasteActionEnabled(true);
+}
+
+void UIFileManagerTable::sltPaste()
+{
+    m_copyCutBuffer.clear();
+
+    m_eFileOperationType = FileOperationType_None;
+    setPasteActionEnabled(false);
+}
+
+void UIFileManagerTable::sltShowProperties()
+{
+    showProperties();
+}
+
+void UIFileManagerTable::sltSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected)
+{
+    Q_UNUSED(selected);
+    Q_UNUSED(deselected);
+    setSelectionDependentActionsEnabled(m_pView->hasSelection());
+}
+
+void UIFileManagerTable::sltLocationComboCurrentChange(const QString &strLocation)
+{
+    QString comboLocation(UIPathOperations::sanitize(strLocation));
+    if (comboLocation == currentDirectoryPath())
+        return;
+    goIntoDirectory(UIPathOperations::pathTrail(comboLocation));
+}
+
+void UIFileManagerTable::sltSelectAll()
+{
+    if (!m_pModel || !m_pView)
+        return;
+    m_pView->selectAll();
+    deSelectUpDirectoryItem();
+}
+
+void UIFileManagerTable::sltInvertSelection()
+{
+    setSelectionForAll(QItemSelectionModel::Toggle | QItemSelectionModel::Rows);
+    deSelectUpDirectoryItem();
+}
+
+void UIFileManagerTable::sltSearchTextChanged(const QString &strText)
+{
+    performSelectionSearch(strText);
+}
+
+void UIFileManagerTable::sltCreateFileViewContextMenu(const QPoint &point)
+{
+    QWidget *pSender = qobject_cast<QWidget*>(sender());
+    if (!pSender)
+        return;
+    createFileViewContextMenu(pSender, point);
+}
+
+void UIFileManagerTable::deSelectUpDirectoryItem()
+{
+    if (!m_pView)
+        return;
+    QItemSelectionModel *pSelectionModel = m_pView->selectionModel();
+    if (!pSelectionModel)
+        return;
+    QModelIndex currentRoot = currentRootIndex();
+    if (!currentRoot.isValid())
+        return;
+
+    /* Make sure that "up directory item" (if exists) is deselected: */
+    for (int i = 0; i < m_pModel->rowCount(currentRoot); ++i)
+    {
+        QModelIndex index = m_pModel->index(i, 0, currentRoot);
+        if (!index.isValid())
+            continue;
+
+        UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
+        if (item && item->isUpDirectory())
+        {
+            QModelIndex indexToDeselect = m_pProxyModel ? m_pProxyModel->mapFromSource(index) : index;
+            pSelectionModel->select(indexToDeselect, QItemSelectionModel::Deselect | QItemSelectionModel::Rows);
+        }
+    }
+}
+
+void UIFileManagerTable::setSelectionForAll(QItemSelectionModel::SelectionFlags flags)
+{
+    if (!m_pView)
+        return;
+    QItemSelectionModel *pSelectionModel = m_pView->selectionModel();
+    if (!pSelectionModel)
+        return;
+    QModelIndex currentRoot = currentRootIndex();
+    if (!currentRoot.isValid())
+        return;
+
+    for (int i = 0; i < m_pModel->rowCount(currentRoot); ++i)
+    {
+        QModelIndex index = m_pModel->index(i, 0, currentRoot);
+        if (!index.isValid())
+            continue;
+        QModelIndex indexToSelect = m_pProxyModel ? m_pProxyModel->mapFromSource(index) : index;
+        pSelectionModel->select(indexToSelect, flags);
+    }
+}
+
+void UIFileManagerTable::setSelection(const QModelIndex &indexInProxyModel)
+{
+    if (!m_pView)
+        return;
+    QItemSelectionModel *selectionModel =  m_pView->selectionModel();
+    if (!selectionModel)
+        return;
+    selectionModel->select(indexInProxyModel, QItemSelectionModel::Current | QItemSelectionModel::Rows | QItemSelectionModel::Select);
+    m_pView->scrollTo(indexInProxyModel, QAbstractItemView::EnsureVisible);
+}
+
+void UIFileManagerTable::deleteByIndex(const QModelIndex &itemIndex)
+{
+    UIFileTableItem *treeItem = indexData(itemIndex);
+    if (!treeItem)
+        return;
+    deleteByItem(treeItem);
+}
+
+void UIFileManagerTable::retranslateUi()
+{
+    if (m_pRootItem)
+    {
+        m_pRootItem->setData(UIFileManager::tr("Name"), UIFileManagerModelColumn_Name);
+        m_pRootItem->setData(UIFileManager::tr("Size"), UIFileManagerModelColumn_Size);
+        m_pRootItem->setData(UIFileManager::tr("Change Time"), UIFileManagerModelColumn_ChangeTime);
+        m_pRootItem->setData(UIFileManager::tr("Owner"), UIFileManagerModelColumn_Owner);
+        m_pRootItem->setData(UIFileManager::tr("Permissions"), UIFileManagerModelColumn_Permissions);
+    }
+    if (m_pWarningLabel)
+        m_pWarningLabel->setText(UIFileManager::tr("No Guest Session"));
+}
+
+bool UIFileManagerTable::eventFilter(QObject *pObject, QEvent *pEvent) /* override */
+{
+    Q_UNUSED(pObject);
+    if (pEvent->type() == QEvent::KeyPress)
+    {
+        QKeyEvent *pKeyEvent = dynamic_cast<QKeyEvent*>(pEvent);
+        if (pKeyEvent)
+        {
+            if (pKeyEvent->key() == Qt::Key_Enter || pKeyEvent->key() == Qt::Key_Return)
+            {
+                if (m_pView && m_pModel)
+                {
+                    /* Get the selected item. If there are 0 or more than 1 selection do nothing: */
+                    QItemSelectionModel *selectionModel =  m_pView->selectionModel();
+                    if (selectionModel)
+                    {
+                        QModelIndexList selectedItemIndices = selectionModel->selectedRows();
+                        if (selectedItemIndices.size() == 1 && m_pModel)
+                            goIntoDirectory( m_pProxyModel->mapToSource(selectedItemIndices.at(0)));
+                    }
+                }
+                return true;
+            }
+            else if (pKeyEvent->key() == Qt::Key_Delete)
+            {
+                sltDelete();
+                return true;
+            }
+            else if (pKeyEvent->key() == Qt::Key_Backspace)
+            {
+                sltGoUp();
+                return true;
+            }
+            else if (pKeyEvent->text().length() == 1 &&
+                     (pKeyEvent->text().at(0).isDigit() ||
+                      pKeyEvent->text().at(0).isLetter()))
+            {
+                if (m_pSearchLineEdit)
+                {
+                    m_pSearchLineEdit->show();
+                    QString strText = m_pSearchLineEdit->text();
+                    strText.append(pKeyEvent->text());
+                    m_pSearchLineEdit->setText(strText);
+                }
+            }
+            else if (pKeyEvent->key() == Qt::Key_Tab)
+            {
+                return true;
+            }
+        }/* if (pKeyEvent) */
+    }/* if (pEvent->type() == QEvent::KeyPress) */
+    else if (pEvent->type() == QEvent::FocusOut)
+    {
+        disableSelectionSearch();
+    }
+    /* Dont hold up the @pEvent but rather send it to the target @pObject: */
+    return false;
+}
+
+UIFileTableItem *UIFileManagerTable::getStartDirectoryItem()
+{
+    if (!m_pRootItem)
+        return 0;
+    if (m_pRootItem->childCount() <= 0)
+        return 0;
+    return m_pRootItem->child(0);
+}
+
+
+QString UIFileManagerTable::getNewDirectoryName()
+{
+    UIStringInputDialog *dialog = new UIStringInputDialog();
+    if (dialog->execute())
+    {
+        QString strDialog = dialog->getString();
+        delete dialog;
+        return strDialog;
+    }
+    delete dialog;
+    return QString();
+}
+
+QString UIFileManagerTable::currentDirectoryPath() const
+{
+    if (!m_pView)
+        return QString();
+    QModelIndex currentRoot = currentRootIndex();
+    if (!currentRoot.isValid())
+        return QString();
+    UIFileTableItem *item = static_cast<UIFileTableItem*>(currentRoot.internalPointer());
+    if (!item)
+        return QString();
+    /* be paranoid: */
+    if (!item->isDirectory())
+        return QString();
+    return item->path();
+}
+
+QStringList UIFileManagerTable::selectedItemPathList()
+{
+    QItemSelectionModel *selectionModel =  m_pView->selectionModel();
+    if (!selectionModel)
+        return QStringList();
+
+    QStringList pathList;
+    QModelIndexList selectedItemIndices = selectionModel->selectedRows();
+    for(int i = 0; i < selectedItemIndices.size(); ++i)
+    {
+        QModelIndex index =
+            m_pProxyModel ? m_pProxyModel->mapToSource(selectedItemIndices.at(i)) : selectedItemIndices.at(i);
+        UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
+        if (!item)
+            continue;
+        pathList.push_back(item->path());
+    }
+    return pathList;
+}
+
+CGuestFsObjInfo UIFileManagerTable::guestFsObjectInfo(const QString& path, CGuestSession &comGuestSession) const
+{
+    if (comGuestSession.isNull())
+        return CGuestFsObjInfo();
+    CGuestFsObjInfo comFsObjInfo = comGuestSession.FsObjQueryInfo(path, true /*aFollowSymlinks*/);
+    if (!comFsObjInfo.isOk())
+        return CGuestFsObjInfo();
+    return comFsObjInfo;
+}
+
+void UIFileManagerTable::setSelectionDependentActionsEnabled(bool fIsEnabled)
+{
+    foreach (QAction *pAction, m_selectionDependentActions)
+    {
+        pAction->setEnabled(fIsEnabled);
+    }
+}
+
+
+QVector<QVariant> UIFileManagerTable::createTreeItemData(const QString &strName, ULONG64 size, const QDateTime &changeTime,
+                                                            const QString &strOwner, const QString &strPermissions)
+{
+    QVector<QVariant> data;
+    data.resize(UIFileManagerModelColumn_Max);
+    data[UIFileManagerModelColumn_Name]        = strName;
+    data[UIFileManagerModelColumn_Size]        = (qulonglong)size;
+    data[UIFileManagerModelColumn_ChangeTime]  = changeTime;
+    data[UIFileManagerModelColumn_Owner]       = strOwner;
+    data[UIFileManagerModelColumn_Permissions] = strPermissions;
+    return data;
+}
+
+bool UIFileManagerTable::event(QEvent *pEvent)
+{
+    if (pEvent->type() == QEvent::EnabledChange)
+    {
+        m_pWarningLabel->setVisible(!isEnabled());
+        m_pView->setVisible(isEnabled());
+        retranslateUi();
+    }
+    return QIWithRetranslateUI<QWidget>::event(pEvent);
+}
+
+QString UIFileManagerTable::fileTypeString(FileObjectType type)
+{
+    QString strType = UIFileManager::tr("Unknown");
+    switch (type)
+    {
+        case FileObjectType_File:
+            strType = UIFileManager::tr("File");
+            break;
+        case FileObjectType_Directory:
+            strType = UIFileManager::tr("Directory");
+            break;
+        case FileObjectType_SymLink:
+            strType = UIFileManager::tr("Symbolic Link");
+            break;
+        case FileObjectType_Other:
+            strType = UIFileManager::tr("Other");
+            break;
+
+        case FileObjectType_Unknown:
+        default:
+            break;
+    }
+    return strType;
+}
+
+/* static */ QString UIFileManagerTable::humanReadableSize(ULONG64 size)
+{
+    return vboxGlobal().formatSize(size);
+}
+
+void UIFileManagerTable::sltReceiveDirectoryStatistics(UIDirectoryStatistics statistics)
+{
+    if (!m_pPropertiesDialog)
+        return;
+    m_pPropertiesDialog->addDirectoryStatistics(statistics);
+}
+
+QModelIndex UIFileManagerTable::currentRootIndex() const
+{
+    if (!m_pView)
+        return QModelIndex();
+    if (!m_pProxyModel)
+        return m_pView->rootIndex();
+    return m_pProxyModel->mapToSource(m_pView->rootIndex());
+}
+
+void UIFileManagerTable::performSelectionSearch(const QString &strSearchText)
+{
+    if (!m_pProxyModel | !m_pView || strSearchText.isEmpty())
+        return;
+
+    int rowCount = m_pProxyModel->rowCount(m_pView->rootIndex());
+    UIFileTableItem *pFoundItem = 0;
+    QModelIndex index;
+    for (int i = 0; i < rowCount && !pFoundItem; ++i)
+    {
+        index = m_pProxyModel->index(i, 0, m_pView->rootIndex());
+        if (!index.isValid())
+            continue;
+        pFoundItem = static_cast<UIFileTableItem*>(m_pProxyModel->mapToSource(index).internalPointer());
+        if (!pFoundItem)
+            continue;
+        const QString &strName = pFoundItem->name();
+        if (!strName.startsWith(m_pSearchLineEdit->text(), Qt::CaseInsensitive))
+            pFoundItem = 0;
+    }
+    if (pFoundItem)
+    {
+        /* Deselect anything that is already selected: */
+        m_pView->clearSelection();
+        setSelection(index);
+    }
+}
+
+void UIFileManagerTable::disableSelectionSearch()
+{
+    if (!m_pSearchLineEdit)
+        return;
+    m_pSearchLineEdit->blockSignals(true);
+    m_pSearchLineEdit->clear();
+    m_pSearchLineEdit->hide();
+    m_pSearchLineEdit->blockSignals(false);
+}
+
+bool UIFileManagerTable::checkIfDeleteOK()
+{
+    UIFileManagerOptions *pFileManagerOptions = UIFileManagerOptions::instance();
+    if (!pFileManagerOptions)
+        return true;
+    if (!pFileManagerOptions->bAskDeleteConfirmation)
+        return true;
+    UIFileDeleteConfirmationDialog *pDialog =
+        new UIFileDeleteConfirmationDialog(this);
+
+    bool fContinueWithDelete = (pDialog->execute() == QDialog::Accepted);
+    bool bAskNextTime = pDialog->askDeleteConfirmationNextTime();
+
+    /* Update the file manager options only if it is necessary: */
+    if (pFileManagerOptions->bAskDeleteConfirmation != bAskNextTime)
+    {
+        pFileManagerOptions->bAskDeleteConfirmation = bAskNextTime;
+        /* Notify file manager options panel so that the check box there is updated: */
+        emit sigDeleteConfirmationOptionChanged();
+    }
+
+    delete pDialog;
+
+    return fContinueWithDelete;
+
+}
+
+#include "UIFileManagerTable.moc"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerTable.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerTable.h	(revision 76177)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIFileManagerTable.h	(revision 76177)
@@ -0,0 +1,407 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIFileManagerTable class declaration.
+ */
+
+/*
+ * Copyright (C) 2016-2018 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ */
+
+#ifndef ___UIFileManagerTable_h___
+#define ___UIFileManagerTable_h___
+
+/* Qt includes: */
+#include <QItemSelectionModel>
+#include <QMutex>
+#include <QThread>
+#include <QWidget>
+
+/* COM includes: */
+#include "COMEnums.h"
+#include "CGuestSession.h"
+
+/* GUI includes: */
+#include "QIDialog.h"
+#include "QITableView.h"
+#include "QIWithRetranslateUI.h"
+#include "UIGuestControlDefs.h"
+
+/* Forward declarations: */
+class QAction;
+class QFileInfo;
+class QComboBox;
+class QILabel;
+class QILineEdit;
+class QGridLayout;
+class QSortFilterProxyModel;
+class QTextEdit;
+class QVBoxLayout;
+class UIActionPool;
+class UIFileTableItem;
+class UIFileManagerModel;
+class UIGuestControlFileProxyModel;
+class UIGuestControlFileView;
+class UIToolBar;
+
+/** @todo r=bird: Why don't you just use KFsObjType? */
+enum FileObjectType
+{
+    FileObjectType_File = 0,
+    FileObjectType_Directory,
+    FileObjectType_SymLink,
+    FileObjectType_Other,
+    FileObjectType_Unknown,
+    FileObjectType_Max
+};
+
+/** A simple struck to store some statictics for a directory. Mainly used by  UIDirectoryDiskUsageComputer instances. */
+class UIDirectoryStatistics
+{
+public:
+    UIDirectoryStatistics();
+    ULONG64    m_totalSize;
+    unsigned   m_uFileCount;
+    unsigned   m_uDirectoryCount;
+    unsigned   m_uSymlinkCount;
+};
+
+Q_DECLARE_METATYPE(UIDirectoryStatistics);
+
+
+/** Examines the paths in @p strStartPath and collects some staticstics from them recursively (in case directories)
+ *  Runs on a worker thread to avoid GUI freezes. UIGuestFileTable and UIHostFileTable uses specialized children
+ *  of this class since the calls made on file objects are different. */
+class UIDirectoryDiskUsageComputer : public QThread
+{
+    Q_OBJECT;
+
+signals:
+
+    void sigResultUpdated(UIDirectoryStatistics);
+
+public:
+
+    UIDirectoryDiskUsageComputer(QObject *parent, QStringList strStartPath);
+    /** Sets the m_fOkToContinue to false. This results an early termination
+      * of the  directoryStatisticsRecursive member function. */
+    void stopRecursion();
+
+protected:
+
+    /** Read the directory with the path @p path recursively and collect #of objects and  total size */
+    virtual void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics) = 0;
+    virtual void           run() /* override */;
+    /** Returns the m_fOkToContinue flag */
+    bool                  isOkToContinue() const;
+    /** Stores a list of paths whose statistics are accumulated, can be file, directory etc: */
+    QStringList           m_pathList;
+    UIDirectoryStatistics m_resultStatistics;
+    QMutex                m_mutex;
+
+private:
+
+    bool     m_fOkToContinue;
+};
+
+
+/** A QIDialog child to display properties of a file object */
+class UIPropertiesDialog : public QIDialog
+{
+
+    Q_OBJECT;
+
+public:
+
+    UIPropertiesDialog(QWidget *pParent = 0, Qt::WindowFlags flags = 0);
+    void setPropertyText(const QString &strProperty);
+    void addDirectoryStatistics(UIDirectoryStatistics statictics);
+
+private:
+
+    QVBoxLayout    *m_pMainLayout;
+    QTextEdit *m_pInfoEdit;
+    QString   m_strProperty;
+};
+
+/** A collection of simple utility functions to manipulate path strings */
+class UIPathOperations
+{
+public:
+    static QString removeMultipleDelimiters(const QString &path);
+    static QString removeTrailingDelimiters(const QString &path);
+    static QString addTrailingDelimiters(const QString &path);
+    static QString addStartDelimiter(const QString &path);
+
+    static QString sanitize(const QString &path);
+    /** Merges prefix and suffix by making sure they have a single '/' in between */
+    static QString mergePaths(const QString &path, const QString &baseName);
+    /** Returns the last part of the @p path. That is the filename or directory name without the path */
+    static QString getObjectName(const QString &path);
+    /** Removes the object name and return the path */
+    static QString getPathExceptObjectName(const QString &path);
+    /** Replaces the last part of the @p previusPath with newBaseName */
+    static QString constructNewItemPath(const QString &previousPath, const QString &newBaseName);
+    /** Splits the path and return it as a QStringList, top most being the 0th element. No delimiters */
+    static QStringList pathTrail(const QString &path);
+    static const QChar delimiter;
+    static const QChar dosDelimiter;
+
+    /** Tries to determine if the path starts with DOS style drive letters. */
+    static bool doesPathStartWithDriveLetter(const QString &path);
+
+};
+
+/** A UIFileTableItem instance is a tree node representing a file object (file, directory, etc). The tree contructed
+    by these instances is the data source for the UIFileManagerModel. */
+class UIFileTableItem
+{
+public:
+
+    /** @p data contains values to be shown in table view's colums. data[0] is assumed to be
+     *  the name of the file object which is the file name including extension or name of the
+     *  directory */
+    explicit UIFileTableItem(const QVector<QVariant> &data,
+                             UIFileTableItem *parentItem, FileObjectType type);
+    ~UIFileTableItem();
+
+    void appendChild(UIFileTableItem *child);
+
+    UIFileTableItem *child(int row) const;
+    /** Searches for the child by path and returns it if found. */
+    UIFileTableItem *child(const QString &path) const;
+    int childCount() const;
+    int columnCount() const;
+    QVariant data(int column) const;
+    void setData(const QVariant &data, int index);
+    int row() const;
+    UIFileTableItem *parentItem();
+
+    bool isDirectory() const;
+    bool isSymLink() const;
+    bool isFile() const;
+
+    bool isOpened() const;
+    void setIsOpened(bool flag);
+
+    const QString  &path() const;
+    void setPath(const QString &path);
+
+    /** Returns true if this is directory and name is ".." */
+    bool isUpDirectory() const;
+    void clearChildren();
+
+    FileObjectType   type() const;
+
+    const QString &targetPath() const;
+    void setTargetPath(const QString &path);
+
+    bool isSymLinkToADirectory() const;
+    void setIsSymLinkToADirectory(bool flag);
+
+    bool isSymLinkToAFile() const;
+
+    const QString &owner() const;
+    void setOwner(const QString &owner);
+
+    QString name() const;
+
+    void setIsDriveItem(bool flag);
+    bool isDriveItem() const;
+
+private:
+
+    QList<UIFileTableItem*>         m_childItems;
+    /** Used to find children by name */
+    QMap<QString, UIFileTableItem*> m_childMap;
+    /** It is required that m_itemData[0] is name (QString) of the file object */
+    QVector<QVariant>  m_itemData;
+    UIFileTableItem *m_parentItem;
+    bool             m_bIsOpened;
+    /** Full absolute path of the item. Without the trailing '/' */
+    QString          m_strPath;
+    /** If this is a symlink m_targetPath keeps the absolute path of the target */
+    QString          m_strTargetPath;
+    /** True if this is a symlink and the target is a directory */
+    bool             m_isTargetADirectory;
+    FileObjectType   m_type;
+    /** True if only this item represents a DOS style drive letter item */
+    bool             m_isDriveItem;
+};
+
+
+/** This class serves a base class for file table. Currently a guest version
+ *  and a host version are derived from this base. Each of these children
+ *  populates the UIFileManagerModel by scanning the file system
+ *  differently. The file structre kept in this class as a tree. */
+class UIFileManagerTable : public QIWithRetranslateUI<QWidget>
+{
+    Q_OBJECT;
+
+signals:
+
+    void sigLogOutput(QString strLog, FileManagerLogType eLogType);
+    void sigDeleteConfirmationOptionChanged();
+
+public:
+
+    UIFileManagerTable(UIActionPool *pActionPool, QWidget *pParent = 0);
+    virtual ~UIFileManagerTable();
+    /** Deletes all the tree nodes */
+    void        reset();
+    void        emitLogOutput(const QString& strOutput, FileManagerLogType eLogType);
+    /** Returns the path of the rootIndex */
+    QString     currentDirectoryPath() const;
+    /** Returns the paths of the selected items (if any) as a list */
+    QStringList selectedItemPathList();
+    virtual void refresh();
+    void         relist();
+    static const unsigned    m_iKiloByte;
+    static QString humanReadableSize(ULONG64 size);
+
+public slots:
+
+    void sltReceiveDirectoryStatistics(UIDirectoryStatistics statictics);
+    void sltCreateNewDirectory();
+    /* index is passed by the item view and represents the double clicked object's 'proxy' model index */
+    void sltItemDoubleClicked(const QModelIndex &index);
+    void sltItemClicked(const QModelIndex &index);
+    void sltGoUp();
+    void sltGoHome();
+    void sltRefresh();
+    void sltDelete();
+    void sltRename();
+    void sltCopy();
+    void sltCut();
+    void sltPaste();
+    void sltShowProperties();
+    void sltSelectAll();
+    void sltInvertSelection();
+
+protected:
+
+    /** This enum is used when performing a gueest-to-guest or host-to-host
+     *  file operations. Paths of source file objects are kept in a single buffer
+     *  and a flag to determine if it is a cut or copy operation is needed */
+    enum FileOperationType
+    {
+        FileOperationType_Copy,
+        FileOperationType_Cut,
+        FileOperationType_None,
+        FileOperationType_Max
+    };
+
+    void retranslateUi();
+    void updateCurrentLocationEdit(const QString& strLocation);
+    /* @p index is for model not for 'proxy' model */
+    void changeLocation(const QModelIndex &index);
+    void initializeFileTree();
+    void insertItemsToTree(QMap<QString,UIFileTableItem*> &map, UIFileTableItem *parent,
+                           bool isDirectoryMap, bool isStartDir);
+    virtual void     readDirectory(const QString& strPath, UIFileTableItem *parent, bool isStartDir = false) = 0;
+    virtual void     deleteByItem(UIFileTableItem *item) = 0;
+    virtual void     deleteByPath(const QStringList &pathList) = 0;
+    virtual void     goToHomeDirectory() = 0;
+    virtual bool     renameItem(UIFileTableItem *item, QString newBaseName) = 0;
+    virtual bool     createDirectory(const QString &path, const QString &directoryName) = 0;
+    virtual QString  fsObjectPropertyString() = 0;
+    virtual void     showProperties() = 0;
+    /** For non-windows system does nothing and for windows systems populates m_driveLetterList with
+     *  drive letters */
+    virtual void     determineDriveLetters() = 0;
+    virtual void     prepareToolbar() = 0;
+    virtual void     createFileViewContextMenu(const QWidget *pWidget, const QPoint &point) = 0;
+    virtual bool     event(QEvent *pEvent) /* override */;
+
+    /** @name Copy/Cut guest-to-guest (host-to-host) stuff.
+     * @{ */
+        /** Disable/enable paste action depending on the m_eFileOperationType. */
+        virtual void  setPasteActionEnabled(bool fEnabled) = 0;
+        virtual void  pasteCutCopiedObjects() = 0;
+        /** stores the type of the pending guest-to-guest (host-to-host) file operation. */
+        FileOperationType m_eFileOperationType;
+    /** @} */
+
+    QString          fileTypeString(FileObjectType type);
+    /* @p item index is item location in model not in 'proxy' model */
+    void             goIntoDirectory(const QModelIndex &itemIndex);
+    /** Follows the path trail, opens directories as it descends */
+    void             goIntoDirectory(const QStringList &pathTrail);
+    /** Goes into directory pointed by the @p item */
+    void             goIntoDirectory(UIFileTableItem *item);
+    UIFileTableItem* indexData(const QModelIndex &index) const;
+    bool             eventFilter(QObject *pObject, QEvent *pEvent) /* override */;
+    CGuestFsObjInfo  guestFsObjectInfo(const QString& path, CGuestSession &comGuestSession) const;
+    void             setSelectionDependentActionsEnabled(bool fIsEnabled);
+    /** Creates a QList out of the parameters wrt. UIFileManagerModelColumn enum */
+    QVector<QVariant>  createTreeItemData(const QString &strName, ULONG64 size, const QDateTime &changeTime,
+                                        const QString &strOwner, const QString &strPermissions);
+
+    UIFileTableItem         *m_pRootItem;
+    QILabel                 *m_pLocationLabel;
+    UIPropertiesDialog      *m_pPropertiesDialog;
+    UIActionPool            *m_pActionPool;
+    UIToolBar               *m_pToolBar;
+
+    /** Stores the drive letters the file system has (for windows system). For non-windows
+     *  systems this is empty and for windows system it should at least contain C:/ */
+    QStringList              m_driveLetterList;
+    /** The set of actions which need some selection to work on. Like cut, copy etc. */
+    QSet<QAction*>           m_selectionDependentActions;
+    /** The absolue path list of the file objects which user has chosen to cut/copy. this
+     *  list will be cleaned after a paste operation or overwritten by a subsequent cut/copy.
+     *  Currently only used by the guest side. */
+    QStringList              m_copyCutBuffer;
+
+private slots:
+
+    void sltCreateFileViewContextMenu(const QPoint &point);
+    void sltSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected);
+    void sltLocationComboCurrentChange(const QString &strLocation);
+    void sltSearchTextChanged(const QString &strText);
+
+private:
+
+    void             prepareObjects();
+    /** @p itemIndex is assumed to be 'model' index not 'proxy model' index */
+    void             deleteByIndex(const QModelIndex &itemIndex);
+    /** Returns the UIFileTableItem for path / which is a direct (and single) child of m_pRootItem */
+    UIFileTableItem *getStartDirectoryItem();
+    /** Shows a modal dialog with a line edit for user to enter a new directory name and return the entered string*/
+    QString         getNewDirectoryName();
+    void            deSelectUpDirectoryItem();
+    void            setSelectionForAll(QItemSelectionModel::SelectionFlags flags);
+    void            setSelection(const QModelIndex &indexInProxyModel);
+    /** The start directory requires a special attention since on file systems with drive letters
+     *  drive letter are direct children of the start directory. On other systems start directory is '/' */
+    void            populateStartDirectory(UIFileTableItem *startItem);
+    /** Root index of the m_pModel */
+    QModelIndex     currentRootIndex() const;
+    /* Searches the content of m_pSearchLineEdit within the current items' names and selects the item if found. */
+    void            performSelectionSearch(const QString &strSearchText);
+    /** Clears the m_pSearchLineEdit and hides it. */
+    void            disableSelectionSearch();
+    /** Checks if delete confirmation dialog is shown and users choice. Returns true
+     *  if deletion can continue */
+    bool            checkIfDeleteOK();
+
+    UIFileManagerModel      *m_pModel;
+    UIGuestControlFileView       *m_pView;
+    UIGuestControlFileProxyModel *m_pProxyModel;
+
+    QGridLayout     *m_pMainLayout;
+    QComboBox       *m_pLocationComboBox;
+    QILineEdit      *m_pSearchLineEdit;
+    QILabel         *m_pWarningLabel;
+
+    friend class     UIFileManagerModel;
+};
+
+#endif /* !___UIFileManagerTable_h___ */
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManager.cpp	(revision 76176)
+++ 	(revision )
@@ -1,821 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIGuestControlFileManager class implementation.
- */
-
-/*
- * Copyright (C) 2016-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QAbstractItemModel>
-# include <QCheckBox>
-# include <QHBoxLayout>
-# include <QHeaderView>
-# include <QPushButton>
-# include <QSplitter>
-# include <QTableWidget>
-# include <QTextEdit>
-
-/* GUI includes: */
-# include "QILabel.h"
-# include "QILineEdit.h"
-# include "QITabWidget.h"
-# include "QITreeWidget.h"
-# include "QIWithRetranslateUI.h"
-# include "UIActionPool.h"
-# include "UIErrorString.h"
-# include "UIExtraDataManager.h"
-# include "UIIconPool.h"
-# include "UIGuestControlConsole.h"
-# include "UIGuestControlFileManager.h"
-# include "UIGuestControlFileManagerSessionPanel.h"
-# include "UIGuestControlFileManagerOptionsPanel.h"
-# include "UIGuestControlFileManagerLogPanel.h"
-# include "UIGuestControlFileManagerOperationsPanel.h"
-# include "UIGuestFileTable.h"
-# include "UIGuestControlInterface.h"
-# include "UIHostFileTable.h"
-# include "UIToolBar.h"
-# include "VBoxGlobal.h"
-
-/* COM includes: */
-# include "CFsObjInfo.h"
-# include "CGuest.h"
-# include "CGuestDirectory.h"
-# include "CGuestFsObjInfo.h"
-# include "CGuestProcess.h"
-# include "CGuestSession.h"
-# include "CGuestSessionStateChangedEvent.h"
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-
-/*********************************************************************************************************************************
-*   UIFileOperationsList definition.                                                                                   *
-*********************************************************************************************************************************/
-
-class UIFileOperationsList : public QITreeWidget
-{
-    Q_OBJECT;
-public:
-
-    UIFileOperationsList(QWidget *pParent = 0);
-
-private:
-};
-
-
-/*********************************************************************************************************************************
-*   UIGuestControlFileManagerOptions implementation.                                                                             *
-*********************************************************************************************************************************/
-
-UIGuestControlFileManagerOptions *UIGuestControlFileManagerOptions::m_pInstance = 0;
-
-UIGuestControlFileManagerOptions* UIGuestControlFileManagerOptions::instance()
-{
-    if (!m_pInstance)
-    m_pInstance = new UIGuestControlFileManagerOptions;
-    return m_pInstance;
-}
-
-void UIGuestControlFileManagerOptions::create()
-{
-    if (m_pInstance)
-        return;
-    m_pInstance = new UIGuestControlFileManagerOptions;
-}
-
-void UIGuestControlFileManagerOptions::destroy()
-{
-    delete m_pInstance;
-    m_pInstance = 0;
-}
-
- UIGuestControlFileManagerOptions::~UIGuestControlFileManagerOptions()
-{
-
-}
-
-UIGuestControlFileManagerOptions::UIGuestControlFileManagerOptions()
-    : bListDirectoriesOnTop(true)
-    , bAskDeleteConfirmation(false)
-    , bShowHumanReadableSizes(true)
-{
-}
-
-/*********************************************************************************************************************************
-*   UIFileOperationsList implementation.                                                                                   *
-*********************************************************************************************************************************/
-
-UIFileOperationsList::UIFileOperationsList(QWidget *pParent)
-    :QITreeWidget(pParent)
-{}
-
-
-/*********************************************************************************************************************************
-*   UIGuestControlFileManager implementation.                                                                                    *
-*********************************************************************************************************************************/
-
-UIGuestControlFileManager::UIGuestControlFileManager(EmbedTo enmEmbedding, UIActionPool *pActionPool,
-                                                     const CGuest &comGuest, QWidget *pParent, bool fShowToolbar /* = true */)
-    : QIWithRetranslateUI<QWidget>(pParent)
-    , m_comGuest(comGuest)
-    , m_pMainLayout(0)
-    , m_pVerticalSplitter(0)
-    , m_pToolBar(0)
-    , m_pVerticalToolBar(0)
-    , m_pGuestFileTable(0)
-    , m_pHostFileTable(0)
-    , m_enmEmbedding(enmEmbedding)
-    , m_pActionPool(pActionPool)
-    , m_fShowToolbar(fShowToolbar)
-    , m_pOptionsPanel(0)
-    , m_pLogPanel(0)
-    , m_pSessionPanel(0)
-    , m_pOperationsPanel(0)
-{
-    loadOptions();
-    prepareGuestListener();
-    prepareObjects();
-    prepareConnections();
-    retranslateUi();
-    restorePanelVisibility();
-    UIGuestControlFileManagerOptions::create();
-}
-
-UIGuestControlFileManager::~UIGuestControlFileManager()
-{
-    if (m_comGuest.isOk() && m_pQtGuestListener && m_comGuestListener.isOk())
-        cleanupListener(m_pQtGuestListener, m_comGuestListener, m_comGuest.GetEventSource());
-    if (m_comGuestSession.isOk() && m_pQtSessionListener && m_comSessionListener.isOk())
-        cleanupListener(m_pQtSessionListener, m_comSessionListener, m_comGuestSession.GetEventSource());
-
-    if (m_comGuestSession.isOk())
-        m_comGuestSession.Close();
-
-    saveOptions();
-    UIGuestControlFileManagerOptions::destroy();
-}
-
-QMenu *UIGuestControlFileManager::menu() const
-{
-    if (!m_pActionPool)
-        return 0;
-    return m_pActionPool->action(UIActionIndex_M_GuestControlFileManager)->menu();
-}
-
-void UIGuestControlFileManager::retranslateUi()
-{
-}
-
-void UIGuestControlFileManager::prepareGuestListener()
-{
-    if (m_comGuest.isOk())
-    {
-        QVector<KVBoxEventType> eventTypes;
-        eventTypes << KVBoxEventType_OnGuestSessionRegistered;
-
-        prepareListener(m_pQtGuestListener, m_comGuestListener,
-                        m_comGuest.GetEventSource(), eventTypes);
-    }
-}
-
-void UIGuestControlFileManager::prepareObjects()
-{
-    /* m_pMainLayout is the outer most layout containing the main toolbar and splitter widget: */
-    m_pMainLayout = new QVBoxLayout(this);
-    if (!m_pMainLayout)
-        return;
-
-    /* Configure layout: */
-    m_pMainLayout->setContentsMargins(0, 0, 0, 0);
-#ifdef VBOX_WS_MAC
-    m_pMainLayout->setSpacing(10);
-#else
-    m_pMainLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
-#endif
-
-    if (m_fShowToolbar)
-        prepareToolBar();
-    /* Two widgets are inserted into this splitter. Upper pWidget widget is a container with file tables and all the panels
-       except the log panel and lower widget is the log panel: */
-    m_pVerticalSplitter = new QSplitter;
-    if (!m_pVerticalSplitter)
-        return;
-
-    m_pMainLayout->addWidget(m_pVerticalSplitter);
-    m_pVerticalSplitter->setOrientation(Qt::Vertical);
-    m_pVerticalSplitter->setHandleWidth(4);
-
-    QHBoxLayout *pFileTableContainerLayout = new QHBoxLayout;
-    pFileTableContainerLayout->setContentsMargins(0, 0, 0, 0);
-#ifdef VBOX_WS_MAC
-    pFileTableContainerLayout->setSpacing(10);
-#else
-    pFileTableContainerLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
-#endif
-
-    QWidget *pTopWidget = new QWidget;
-    QVBoxLayout *pTopLayout = new QVBoxLayout;
-    pTopLayout->setSpacing(0);
-    pTopLayout->setContentsMargins(0, 0, 0, 0);
-
-    pTopWidget->setLayout(pTopLayout);
-
-    if (pFileTableContainerLayout)
-    {
-        pFileTableContainerLayout->setSpacing(0);
-        pFileTableContainerLayout->setContentsMargins(0, 0, 0, 0);
-        m_pGuestFileTable = new UIGuestFileTable(m_pActionPool);
-        m_pGuestFileTable->setEnabled(false);
-
-        m_pHostFileTable = new UIHostFileTable(m_pActionPool);
-        if (m_pHostFileTable)
-        {
-            connect(m_pHostFileTable, &UIHostFileTable::sigLogOutput,
-                    this, &UIGuestControlFileManager::sltReceieveLogOutput);
-            connect(m_pHostFileTable, &UIHostFileTable::sigDeleteConfirmationOptionChanged,
-                    this, &UIGuestControlFileManager::sltHandleOptionsUpdated);
-            pFileTableContainerLayout->addWidget(m_pHostFileTable);
-        }
-        prepareVerticalToolBar(pFileTableContainerLayout);
-        if (m_pGuestFileTable)
-        {
-            connect(m_pGuestFileTable, &UIGuestFileTable::sigLogOutput,
-                    this, &UIGuestControlFileManager::sltReceieveLogOutput);
-            connect(m_pGuestFileTable, &UIGuestFileTable::sigNewFileOperation,
-                    this, &UIGuestControlFileManager::sltReceieveNewFileOperation);
-            connect(m_pGuestFileTable, &UIGuestFileTable::sigDeleteConfirmationOptionChanged,
-                    this, &UIGuestControlFileManager::sltHandleOptionsUpdated);
-            pFileTableContainerLayout->addWidget(m_pGuestFileTable);
-        }
-    }
-
-    pTopLayout->addLayout(pFileTableContainerLayout);
-    m_pSessionPanel = new UIGuestControlFileManagerSessionPanel(this /* manager dialog */, 0 /*parent */);
-    if (m_pSessionPanel)
-    {
-        m_pSessionPanel->hide();
-        m_panelActionMap.insert(m_pSessionPanel, m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_Session));
-        pTopLayout->addWidget(m_pSessionPanel);
-    }
-
-    m_pOptionsPanel =
-        new UIGuestControlFileManagerOptionsPanel(this /* manager dialog */,
-                                                   0 /*parent */, UIGuestControlFileManagerOptions::instance());
-    if (m_pOptionsPanel)
-    {
-        m_pOptionsPanel->hide();
-        m_panelActionMap.insert(m_pOptionsPanel, m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_Options));
-        connect(m_pOptionsPanel, &UIGuestControlFileManagerOptionsPanel::sigOptionsChanged,
-                this, &UIGuestControlFileManager::sltListDirectoriesBeforeChanged);
-        pTopLayout->addWidget(m_pOptionsPanel);
-    }
-
-    m_pVerticalSplitter->addWidget(pTopWidget);
-
-    m_pOperationsPanel =
-        new UIGuestControlFileManagerOperationsPanel(this /* manager dialog */, 0 /*parent */);
-    if (m_pOperationsPanel)
-    {
-        m_pOperationsPanel->hide();
-        connect(m_pOperationsPanel, &UIGuestControlFileManagerOperationsPanel::sigFileOperationComplete,
-                this, &UIGuestControlFileManager::sltFileOperationComplete);
-        connect(m_pOperationsPanel, &UIGuestControlFileManagerOperationsPanel::sigFileOperationFail,
-                this, &UIGuestControlFileManager::sltReceieveLogOutput);
-        m_panelActionMap.insert(m_pOperationsPanel, m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_FileOperations));
-    }
-
-    m_pLogPanel = new UIGuestControlFileManagerLogPanel(this /* manager dialog */, 0 /*parent */);
-    if (m_pLogPanel)
-    {
-        m_pLogPanel->hide();
-        m_panelActionMap.insert(m_pLogPanel, m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_Log));
-    }
-
-    m_pVerticalSplitter->addWidget(pTopWidget);
-    m_pVerticalSplitter->addWidget(m_pOperationsPanel);
-    m_pVerticalSplitter->addWidget(m_pLogPanel);
-    m_pVerticalSplitter->setCollapsible(m_pVerticalSplitter->indexOf(pTopWidget), false);
-    m_pVerticalSplitter->setCollapsible(m_pVerticalSplitter->indexOf(m_pOperationsPanel), false);
-    m_pVerticalSplitter->setCollapsible(m_pVerticalSplitter->indexOf(m_pLogPanel), false);
-    m_pVerticalSplitter->setStretchFactor(0, 3);
-    m_pVerticalSplitter->setStretchFactor(1, 1);
-    m_pVerticalSplitter->setStretchFactor(2, 1);
-}
-
-void UIGuestControlFileManager::prepareVerticalToolBar(QHBoxLayout *layout)
-{
-    m_pVerticalToolBar = new UIToolBar;
-    if (!m_pVerticalToolBar)
-        return;
-
-    m_pVerticalToolBar->setOrientation(Qt::Vertical);
-    m_pVerticalToolBar->setEnabled(false);
-
-    /* Add to dummy QWidget to toolbar to center the action icons vertically: */
-    QWidget *topSpacerWidget = new QWidget(this);
-    topSpacerWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
-    topSpacerWidget->setVisible(true);
-    QWidget *bottomSpacerWidget = new QWidget(this);
-    bottomSpacerWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
-    bottomSpacerWidget->setVisible(true);
-
-    m_pVerticalToolBar->addWidget(topSpacerWidget);
-    m_pVerticalToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_CopyToHost));
-    m_pVerticalToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_CopyToGuest));
-    m_pVerticalToolBar->addWidget(bottomSpacerWidget);
-
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_CopyToHost), &QAction::triggered,
-            this, &UIGuestControlFileManager::sltCopyGuestToHost);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_CopyToGuest), &QAction::triggered,
-             this, &UIGuestControlFileManager::sltCopyHostToGuest);
-
-    layout ->addWidget(m_pVerticalToolBar);
-}
-
-void UIGuestControlFileManager::prepareConnections()
-{
-    if (m_pQtGuestListener)
-    {
-        connect(m_pQtGuestListener->getWrapped(), &UIMainEventListener::sigGuestSessionUnregistered,
-                this, &UIGuestControlFileManager::sltGuestSessionUnregistered);
-    }
-    if (m_pSessionPanel)
-    {
-        connect(m_pSessionPanel, &UIGuestControlFileManagerSessionPanel::sigCreateSession,
-                this, &UIGuestControlFileManager::sltCreateSession);
-        connect(m_pSessionPanel, &UIGuestControlFileManagerSessionPanel::sigCloseSession,
-                this, &UIGuestControlFileManager::sltCloseSession);
-    }
-}
-
-void UIGuestControlFileManager::prepareToolBar()
-{
-    /* Create toolbar: */
-    m_pToolBar = new UIToolBar(parentWidget());
-    if (m_pToolBar)
-    {
-        /* Configure toolbar: */
-        const int iIconMetric = (int)(QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize));
-        m_pToolBar->setIconSize(QSize(iIconMetric, iIconMetric));
-        m_pToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
-
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_Session));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_Options));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_FileOperations));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_Log));
-
-        connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_Options), &QAction::toggled,
-                this, &UIGuestControlFileManager::sltPanelActionToggled);
-        connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_Log), &QAction::toggled,
-                this, &UIGuestControlFileManager::sltPanelActionToggled);
-        connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_Session), &QAction::toggled,
-                this, &UIGuestControlFileManager::sltPanelActionToggled);
-        connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_T_FileOperations), &QAction::toggled,
-                this, &UIGuestControlFileManager::sltPanelActionToggled);
-
-#ifdef TEST_COPY
-
-        m_pToolBar->addSeparator();
-        QAction *pSession = new QAction("session", this);
-        QAction *pCopy = new QAction("Copy", this);
-        m_pToolBar->addAction(pSession);
-        m_pToolBar->addAction(pCopy);
-
-        connect(pSession, &QAction::triggered,
-                this, &UIGuestControlFileManager::sltTestSession);
-        connect(pCopy, &QAction::triggered,
-                this, &UIGuestControlFileManager::sltTestCopy);
-
-#endif
-
-#ifdef VBOX_WS_MAC
-        /* Check whether we are embedded into a stack: */
-        if (m_enmEmbedding == EmbedTo_Stack)
-        {
-            /* Add into layout: */
-            m_pMainLayout->addWidget(m_pToolBar);
-        }
-#else
-        /* Add into layout: */
-        m_pMainLayout->addWidget(m_pToolBar);
-#endif
-    }
-}
-
-
-void UIGuestControlFileManager::sltGuestSessionUnregistered(CGuestSession guestSession)
-{
-    if (guestSession.isNull())
-        return;
-    if (guestSession == m_comGuestSession && !m_comGuestSession.isNull())
-    {
-        m_comGuestSession.detach();
-        postSessionClosed();
-    }
-}
-
-void UIGuestControlFileManager::sltCreateSession(QString strUserName, QString strPassword)
-{
-    if (!UIGuestControlInterface::isGuestAdditionsAvailable(m_comGuest))
-    {
-        appendLog("Could not find Guest Additions", FileManagerLogType_Error);
-        postSessionClosed();
-        return;
-    }
-    if (strUserName.isEmpty())
-    {
-        appendLog("No user name is given", FileManagerLogType_Error);
-        return;
-    }
-    createSession(strUserName, strPassword);
-}
-
-void UIGuestControlFileManager::sltCloseSession()
-{
-    if (!m_comGuestSession.isOk())
-    {
-        appendLog("Guest session is not valid", FileManagerLogType_Error);
-        postSessionClosed();
-        return;
-    }
-    if (m_pGuestFileTable)
-        m_pGuestFileTable->reset();
-
-    if (m_comGuestSession.isOk() && m_pQtSessionListener && m_comSessionListener.isOk())
-        cleanupListener(m_pQtSessionListener, m_comSessionListener, m_comGuestSession.GetEventSource());
-
-    m_comGuestSession.Close();
-    appendLog("Guest session is closed", FileManagerLogType_Info);
-    postSessionClosed();
-}
-
-void UIGuestControlFileManager::sltGuestSessionStateChanged(const CGuestSessionStateChangedEvent &cEvent)
-{
-    if (cEvent.isOk() /*&& m_comGuestSession.isOk()*/)
-    {
-        CVirtualBoxErrorInfo cErrorInfo = cEvent.GetError();
-        if (cErrorInfo.isOk())
-            appendLog(cErrorInfo.GetText(), FileManagerLogType_Error);
-    }
-    if (m_comGuestSession.GetStatus() == KGuestSessionStatus_Started)
-    {
-        initFileTable();
-        postSessionCreated();
-    }
-    else
-    {
-        appendLog("Session status has changed", FileManagerLogType_Info);
-    }
-}
-
-void UIGuestControlFileManager::sltReceieveLogOutput(QString strOutput, FileManagerLogType eLogType)
-{
-    appendLog(strOutput, eLogType);
-}
-
-void UIGuestControlFileManager::sltCopyGuestToHost()
-{
-    copyToHost();
-}
-
-void UIGuestControlFileManager::sltCopyHostToGuest()
-{
-    copyToGuest();
-}
-
-void UIGuestControlFileManager::sltPanelActionToggled(bool fChecked)
-{
-    QAction *pSenderAction = qobject_cast<QAction*>(sender());
-    if (!pSenderAction)
-        return;
-    UIGuestControlFileManagerPanel* pPanel = 0;
-    /* Look for the sender() within the m_panelActionMap's values: */
-    for (QMap<UIGuestControlFileManagerPanel*, QAction*>::const_iterator iterator = m_panelActionMap.begin();
-        iterator != m_panelActionMap.end(); ++iterator)
-    {
-        if (iterator.value() == pSenderAction)
-            pPanel = iterator.key();
-    }
-    if (!pPanel)
-        return;
-    if (fChecked)
-        showPanel(pPanel);
-    else
-        hidePanel(pPanel);
-}
-
-void UIGuestControlFileManager::sltListDirectoriesBeforeChanged()
-{
-    if (m_pGuestFileTable)
-        m_pGuestFileTable->relist();
-    if (m_pHostFileTable)
-        m_pHostFileTable->relist();
-}
-
-void UIGuestControlFileManager::sltReceieveNewFileOperation(const CProgress &comProgress)
-{
-    if (m_pOperationsPanel)
-        m_pOperationsPanel->addNewProgress(comProgress);
-}
-
-void UIGuestControlFileManager::sltFileOperationComplete(QUuid progressId)
-{
-    Q_UNUSED(progressId);
-    if (!m_pGuestFileTable || !m_pHostFileTable)
-        return;
-
-    m_pHostFileTable->refresh();
-    m_pGuestFileTable->refresh();
-}
-
-void UIGuestControlFileManager::sltHandleOptionsUpdated()
-{
-    if (m_pOptionsPanel)
-    {
-        m_pOptionsPanel->update();
-    }
-}
-
-void UIGuestControlFileManager::copyToHost()
-{
-    if (!m_pGuestFileTable || !m_pHostFileTable)
-        return;
-    QString hostDestinationPath = m_pHostFileTable->currentDirectoryPath();
-    m_pGuestFileTable->copyGuestToHost(hostDestinationPath);
-    m_pHostFileTable->refresh();
-}
-
-void UIGuestControlFileManager::copyToGuest()
-{
-    if (!m_pGuestFileTable || !m_pHostFileTable)
-        return;
-    QStringList hostSourcePathList = m_pHostFileTable->selectedItemPathList();
-    m_pGuestFileTable->copyHostToGuest(hostSourcePathList);
-    m_pGuestFileTable->refresh();
-}
-
-void UIGuestControlFileManager::initFileTable()
-{
-    if (!m_comGuestSession.isOk() || m_comGuestSession.GetStatus() != KGuestSessionStatus_Started)
-        return;
-    if (!m_pGuestFileTable)
-        return;
-    m_pGuestFileTable->initGuestFileTable(m_comGuestSession);
-}
-
-void UIGuestControlFileManager::postSessionCreated()
-{
-    if (m_pSessionPanel)
-        m_pSessionPanel->switchSessionCloseMode();
-    if (m_pGuestFileTable)
-        m_pGuestFileTable->setEnabled(true);
-    if (m_pVerticalToolBar)
-        m_pVerticalToolBar->setEnabled(true);
-}
-
-void UIGuestControlFileManager::postSessionClosed()
-{
-    if (m_pSessionPanel)
-        m_pSessionPanel->switchSessionCreateMode();
-    if (m_pGuestFileTable)
-        m_pGuestFileTable->setEnabled(false);
-    if (m_pVerticalToolBar)
-        m_pVerticalToolBar->setEnabled(false);
-}
-
-bool UIGuestControlFileManager::createSession(const QString& strUserName, const QString& strPassword,
-                                              const QString& strDomain /* not used currently */)
-{
-    if (!m_comGuest.isOk())
-        return false;
-    m_comGuestSession = m_comGuest.CreateSession(strUserName, strPassword,
-                                                               strDomain, "File Manager Session");
-
-    if (!m_comGuestSession.isOk())
-    {
-        appendLog(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
-        return false;
-    }
-    appendLog("Guest session has been created", FileManagerLogType_Info);
-    if (m_pSessionPanel)
-        m_pSessionPanel->switchSessionCloseMode();
-
-    /* Prepare session listener */
-    QVector<KVBoxEventType> eventTypes;
-    eventTypes << KVBoxEventType_OnGuestSessionStateChanged;
-    //<< KVBoxEventType_OnGuestProcessRegistered;
-    prepareListener(m_pQtSessionListener, m_comSessionListener,
-                    m_comGuestSession.GetEventSource(), eventTypes);
-
-    /* Connect to session listener */
-    qRegisterMetaType<CGuestSessionStateChangedEvent>();
-
-
-    connect(m_pQtSessionListener->getWrapped(), &UIMainEventListener::sigGuestSessionStatedChanged,
-            this, &UIGuestControlFileManager::sltGuestSessionStateChanged);
-     /* Wait session to start. For some reason we cannot get GuestSessionStatusChanged event
-        consistently. So we wait: */
-    appendLog("Waiting the session to start", FileManagerLogType_Info);
-    const ULONG waitTimeout = 2000;
-    KGuestSessionWaitResult waitResult = m_comGuestSession.WaitFor(KGuestSessionWaitForFlag_Start, waitTimeout);
-    if (waitResult != KGuestSessionWaitResult_Start)
-    {
-        appendLog("The session did not start", FileManagerLogType_Error);
-        sltCloseSession();
-        return false;
-    }
-    return true;
-}
-
-void UIGuestControlFileManager::prepareListener(ComObjPtr<UIMainEventListenerImpl> &QtListener,
-                                                CEventListener &comEventListener,
-                                                CEventSource comEventSource, QVector<KVBoxEventType>& eventTypes)
-{
-    if (!comEventSource.isOk())
-        return;
-    /* Create event listener instance: */
-    QtListener.createObject();
-    QtListener->init(new UIMainEventListener, this);
-    comEventListener = CEventListener(QtListener);
-
-    /* Register event listener for CProgress event source: */
-    comEventSource.RegisterListener(comEventListener, eventTypes,
-        gEDataManager->eventHandlingType() == EventHandlingType_Active ? TRUE : FALSE);
-
-    /* If event listener registered as passive one: */
-    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
-    {
-        /* Register event sources in their listeners as well: */
-        QtListener->getWrapped()->registerSource(comEventSource, comEventListener);
-    }
-}
-
-void UIGuestControlFileManager::cleanupListener(ComObjPtr<UIMainEventListenerImpl> &QtListener,
-                                                CEventListener &comEventListener,
-                                                CEventSource comEventSource)
-{
-    if (!comEventSource.isOk())
-        return;
-    /* If event listener registered as passive one: */
-    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
-    {
-        /* Unregister everything: */
-        QtListener->getWrapped()->unregisterSources();
-    }
-
-    /* Make sure VBoxSVC is available: */
-    if (!vboxGlobal().isVBoxSVCAvailable())
-        return;
-
-    /* Unregister event listener for CProgress event source: */
-    comEventSource.UnregisterListener(comEventListener);
-}
-
-template<typename T>
-QStringList UIGuestControlFileManager::getFsObjInfoStringList(const T &fsObjectInfo) const
-{
-    QStringList objectInfo;
-    if (!fsObjectInfo.isOk())
-        return objectInfo;
-    objectInfo << fsObjectInfo.GetName();
-    return objectInfo;
-}
-
-void UIGuestControlFileManager::saveOptions()
-{
-    /* Save a list of currently visible panels: */
-    QStringList strNameList;
-    foreach(UIGuestControlFileManagerPanel* pPanel, m_visiblePanelsList)
-        strNameList.append(pPanel->panelName());
-    gEDataManager->setGuestControlFileManagerVisiblePanels(strNameList);
-    /* Save the options: */
-    UIGuestControlFileManagerOptions *pOptions = UIGuestControlFileManagerOptions::instance();
-    if (pOptions)
-    {
-        gEDataManager->setGuestControlFileManagerOptions(pOptions->bListDirectoriesOnTop,
-                                                         pOptions->bAskDeleteConfirmation,
-                                                         pOptions->bShowHumanReadableSizes);
-    }
-}
-
-void UIGuestControlFileManager::restorePanelVisibility()
-{
-    /** Make sure the actions are set to not-checked. this prevents an unlikely
-     *  bug when the extrakey for the visible panels are manually modified: */
-    foreach(QAction* pAction, m_panelActionMap.values())
-    {
-        pAction->blockSignals(true);
-        pAction->setChecked(false);
-        pAction->blockSignals(false);
-    }
-
-    /* Load the visible panel list and show them: */
-    QStringList strNameList = gEDataManager->guestControlFileManagerVisiblePanels();
-    foreach(const QString strName, strNameList)
-    {
-        foreach(UIGuestControlFileManagerPanel* pPanel, m_panelActionMap.keys())
-        {
-            if (strName == pPanel->panelName())
-            {
-                showPanel(pPanel);
-                break;
-            }
-        }
-    }
-}
-
-void UIGuestControlFileManager::loadOptions()
-{
-    /* Load options: */
-    UIGuestControlFileManagerOptions *pOptions = UIGuestControlFileManagerOptions::instance();
-    if (pOptions)
-    {
-        pOptions->bListDirectoriesOnTop = gEDataManager->guestControlFileManagerListDirectoriesFirst();
-        pOptions->bAskDeleteConfirmation = gEDataManager->guestControlFileManagerShowDeleteConfirmation();
-        pOptions->bShowHumanReadableSizes = gEDataManager->guestControlFileManagerShowHumanReadableSizes();
-    }
-}
-
-void UIGuestControlFileManager::hidePanel(UIGuestControlFileManagerPanel* panel)
-{
-    if (panel && panel->isVisible())
-        panel->setVisible(false);
-    QMap<UIGuestControlFileManagerPanel*, QAction*>::iterator iterator = m_panelActionMap.find(panel);
-    if (iterator != m_panelActionMap.end())
-    {
-        if (iterator.value() && iterator.value()->isChecked())
-            iterator.value()->setChecked(false);
-    }
-    m_visiblePanelsList.removeAll(panel);
-    manageEscapeShortCut();
-}
-
-void UIGuestControlFileManager::showPanel(UIGuestControlFileManagerPanel* panel)
-{
-    if (panel && panel->isHidden())
-        panel->setVisible(true);
-    QMap<UIGuestControlFileManagerPanel*, QAction*>::iterator iterator = m_panelActionMap.find(panel);
-    if (iterator != m_panelActionMap.end())
-    {
-        if (!iterator.value()->isChecked())
-            iterator.value()->setChecked(true);
-    }
-    if (!m_visiblePanelsList.contains(panel))
-        m_visiblePanelsList.push_back(panel);
-    manageEscapeShortCut();
-}
-
-void UIGuestControlFileManager::manageEscapeShortCut()
-{
-    /* if there is no visible panels give the escape shortcut to parent dialog: */
-    if (m_visiblePanelsList.isEmpty())
-    {
-        emit sigSetCloseButtonShortCut(QKeySequence(Qt::Key_Escape));
-        return;
-    }
-    /* Take the escape shortcut from the dialog: */
-    emit sigSetCloseButtonShortCut(QKeySequence());
-    /* Just loop thru the visible panel list and set the esc key to the
-       panel which made visible latest */
-    for (int i = 0; i < m_visiblePanelsList.size() - 1; ++i)
-    {
-        m_visiblePanelsList[i]->setCloseButtonShortCut(QKeySequence());
-    }
-    m_visiblePanelsList.back()->setCloseButtonShortCut(QKeySequence(Qt::Key_Escape));
-}
-
-void UIGuestControlFileManager::appendLog(const QString &strLog, FileManagerLogType eLogType)
-{
-    if (!m_pLogPanel)
-        return;
-    m_pLogPanel->appendLog(strLog, eLogType);
-}
-
-void UIGuestControlFileManager::sltTestSession()
-{
-    createSession("vbox", "password");
-}
-
-void UIGuestControlFileManager::sltTestCopy()
-{
-    QStringList sources;
-    sources << "/home/serkan/misos/xenialpup-7.5-uefi.iso";
-    if ( m_pGuestFileTable)
-        m_pGuestFileTable->copyHostToGuest(sources, "/home/vbox/test");
-}
-
-#include "UIGuestControlFileManager.moc"
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManager.h	(revision 76176)
+++ 	(revision )
@@ -1,202 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIGuestControlFileManager class declaration.
- */
-
-/*
- * Copyright (C) 2016-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIGuestControlFileManager_h___
-#define ___UIGuestControlFileManager_h___
-
-/* Qt includes: */
-#include <QWidget>
-
-/* COM includes: */
-#include "COMEnums.h"
-#include "CEventListener.h"
-#include "CEventSource.h"
-#include "CGuest.h"
-#include "CGuestSession.h"
-
-/* GUI includes: */
-#include "QIManagerDialog.h"
-#include "QIWithRetranslateUI.h"
-#include "UIGuestControlDefs.h"
-#include "UIMainEventListener.h"
-
-/* Forward declarations: */
-class QHBoxLayout;
-class QSplitter;
-class QTableWidget;
-class QTextEdit;
-class QVBoxLayout;
-class QITabWidget;
-class CGuestSessionStateChangedEvent;
-class UIActionPool;
-class UIFileOperationsList;
-class UIGuestControlConsole;
-class UIGuestControlInterface;
-class UIGuestControlFileManagerPanel;
-class UIGuestControlFileManagerLogPanel;
-class UIGuestControlFileManagerOperationsPanel;
-class UIGuestControlFileManagerSessionPanel;
-class UIGuestControlFileManagerOptionsPanel;
-class UIGuestFileTable;
-class UIHostFileTable;
-class UIGuestSessionCreateWidget;
-class UIToolBar;
-
-/** A Utility class to manage file  manager options. */
-class UIGuestControlFileManagerOptions
-{
-
-public:
-
-    static UIGuestControlFileManagerOptions* instance();
-    static void create();
-    static void destroy();
-
-    bool bListDirectoriesOnTop;
-    bool bAskDeleteConfirmation;
-    bool bShowHumanReadableSizes;
-
-private:
-
-    UIGuestControlFileManagerOptions();
-    ~UIGuestControlFileManagerOptions();
-
-    static UIGuestControlFileManagerOptions *m_pInstance;
-};
-
-/** A QWidget extension. it includes a QWidget extension for initiating a guest session
- *  one host and one guest file table views, a log viewer
- *  and some other file manager related widgets. */
-class UIGuestControlFileManager : public QIWithRetranslateUI<QWidget>
-{
-    Q_OBJECT;
-
-public:
-
-    UIGuestControlFileManager(EmbedTo enmEmbedding, UIActionPool *pActionPool,
-                              const CGuest &comGuest, QWidget *pParent, bool fShowToolbar = true);
-    ~UIGuestControlFileManager();
-    QMenu *menu() const;
-
-#ifdef VBOX_WS_MAC
-    /** Returns the toolbar. */
-    UIToolBar *toolbar() const { return m_pToolBar; }
-#endif
-
-signals:
-
-    void sigSetCloseButtonShortCut(QKeySequence);
-
-protected:
-
-    void retranslateUi();
-
-private slots:
-
-    void sltGuestSessionUnregistered(CGuestSession guestSession);
-    void sltCreateSession(QString strUserName, QString strPassword);
-    void sltCloseSession();
-    void sltGuestSessionStateChanged(const CGuestSessionStateChangedEvent &cEvent);
-    void sltReceieveLogOutput(QString strOutput, FileManagerLogType eLogType);
-    void sltCopyGuestToHost();
-    void sltCopyHostToGuest();
-    void sltPanelActionToggled(bool fChecked);
-    void sltListDirectoriesBeforeChanged();
-    void sltReceieveNewFileOperation(const CProgress &comProgress);
-    void sltFileOperationComplete(QUuid progressId);
-    /** Performs whatever necessary when some signal about option change has been receieved. */
-    void sltHandleOptionsUpdated();
-
-    void sltTestCopy();
-    void sltTestSession();
-
-private:
-
-    void prepareObjects();
-    void prepareGuestListener();
-    void prepareConnections();
-    void prepareVerticalToolBar(QHBoxLayout *layout);
-    void prepareToolBar();
-    bool createSession(const QString& strUserName, const QString& strPassword,
-                       const QString& strDomain = QString() /* not used currently */);
-
-    void prepareListener(ComObjPtr<UIMainEventListenerImpl> &Qtistener,
-                         CEventListener &comEventListener,
-                         CEventSource comEventSource, QVector<KVBoxEventType>& eventTypes);
-
-    void cleanupListener(ComObjPtr<UIMainEventListenerImpl> &QtListener,
-                         CEventListener &comEventListener,
-                         CEventSource comEventSource);
-
-    void initFileTable();
-    /** @name Perform operations needed after creating/ending a guest control session
-      * @{ */
-        void postSessionCreated();
-        void postSessionClosed();
-    /** @} */
-
-    /** Saves list of panels and file manager options to the extra data. */
-    void saveOptions();
-    /** Show the panels that have been visible the last time file manager is closed. */
-    void restorePanelVisibility();
-    /** Loads file manager options. This should be done before widget creation
-     *  since some widgets are initilized with these options */
-    void loadOptions();
-    void hidePanel(UIGuestControlFileManagerPanel *panel);
-    void showPanel(UIGuestControlFileManagerPanel *panel);
-    /** Makes sure escape key is assigned to only a single widget. This is done by checking
-        several things in the following order:
-        - when there are no more panels visible assign it to the parent dialog
-        - grab it from the dialog as soon as a panel becomes visible again
-        - assign it to the most recently "unhidden" panel */
-    void manageEscapeShortCut();
-    void copyToGuest();
-    void copyToHost();
-    template<typename T>
-    QStringList               getFsObjInfoStringList(const T &fsObjectInfo) const;
-    void                      appendLog(const QString &strLog, FileManagerLogType eLogType);
-    CGuest                    m_comGuest;
-    CGuestSession             m_comGuestSession;
-    QVBoxLayout              *m_pMainLayout;
-    QSplitter                *m_pVerticalSplitter;
-    UIToolBar                *m_pToolBar;
-    UIToolBar                *m_pVerticalToolBar;
-
-    UIGuestControlConsole    *m_pConsole;
-    UIGuestControlInterface  *m_pControlInterface;
-    UIGuestFileTable         *m_pGuestFileTable;
-    UIHostFileTable          *m_pHostFileTable;
-
-    ComObjPtr<UIMainEventListenerImpl> m_pQtGuestListener;
-    ComObjPtr<UIMainEventListenerImpl> m_pQtSessionListener;
-    CEventListener m_comSessionListener;
-    CEventListener m_comGuestListener;
-    const EmbedTo  m_enmEmbedding;
-    UIActionPool  *m_pActionPool;
-    const bool     m_fShowToolbar;
-    QMap<UIGuestControlFileManagerPanel*, QAction*> m_panelActionMap;
-    QList<UIGuestControlFileManagerPanel*>          m_visiblePanelsList;
-    UIGuestControlFileManagerOptionsPanel          *m_pOptionsPanel;
-    UIGuestControlFileManagerLogPanel              *m_pLogPanel;
-    UIGuestControlFileManagerSessionPanel          *m_pSessionPanel;
-    UIGuestControlFileManagerOperationsPanel       *m_pOperationsPanel;
-    friend class UIGuestControlFileManagerOptionsPanel;
-    friend class UIGuestControlFileManagerPanel;
-    friend class UIGuestControlFileManagerDialog;
-};
-
-#endif /* !___UIGuestControlFileManager_h___ */
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerDialog.cpp	(revision 76176)
+++ 	(revision )
@@ -1,168 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIGuestControlFileManagerDialog class implementation.
- */
-
-/*
- * Copyright (C) 2010-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QPushButton>
-# include <QVBoxLayout>
-
-/* GUI includes: */
-# include "UIDesktopWidgetWatchdog.h"
-# include "UIExtraDataManager.h"
-# include "UIIconPool.h"
-# include "UIGuestControlFileManager.h"
-# include "UIGuestControlFileManagerDialog.h"
-# include "VBoxGlobal.h"
-# ifdef VBOX_WS_MAC
-#  include "VBoxUtils-darwin.h"
-# endif
-
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-
-/*********************************************************************************************************************************
-*   Class UIGuestControlFileManagerDialogFactory implementation.                                                                 *
-*********************************************************************************************************************************/
-
-UIGuestControlFileManagerDialogFactory::UIGuestControlFileManagerDialogFactory(UIActionPool *pActionPool /* = 0 */,
-                                                         const CGuest &comGuest /* = CGuest() */,
-                                                         const QString &strMachineName /* = QString() */)
-    : m_pActionPool(pActionPool)
-    , m_comGuest(comGuest)
-    , m_strMachineName(strMachineName)
-{
-}
-
-void UIGuestControlFileManagerDialogFactory::create(QIManagerDialog *&pDialog, QWidget *pCenterWidget)
-{
-    pDialog = new UIGuestControlFileManagerDialog(pCenterWidget, m_pActionPool, m_comGuest, m_strMachineName);
-}
-
-
-/*********************************************************************************************************************************
-*   Class UIGuestControlFileManagerDialog implementation.                                                                        *
-*********************************************************************************************************************************/
-
-UIGuestControlFileManagerDialog::UIGuestControlFileManagerDialog(QWidget *pCenterWidget,
-                                           UIActionPool *pActionPool,
-                                           const CGuest &comGuest,
-                                           const QString &strMachineName /* = QString() */)
-    : QIWithRetranslateUI<QIManagerDialog>(pCenterWidget)
-    , m_pActionPool(pActionPool)
-    , m_comGuest(comGuest)
-    , m_strMachineName(strMachineName)
-{
-}
-
-void UIGuestControlFileManagerDialog::retranslateUi()
-{
-    /* Translate window title: */
-    setWindowTitle(UIGuestControlFileManager::tr("%1 - Guest Control File Manager").arg(m_strMachineName));
-    /* Translate buttons: */
-    button(ButtonType_Close)->setText(UIGuestControlFileManager::tr("Close"));
-}
-
-void UIGuestControlFileManagerDialog::configure()
-{
-    /* Apply window icons: */
-    setWindowIcon(UIIconPool::iconSetFull(":/file_manager_32px.png", ":/file_manager_16px.png"));
-}
-
-void UIGuestControlFileManagerDialog::configureCentralWidget()
-{
-    /* Create widget: */
-    UIGuestControlFileManager *pWidget = new UIGuestControlFileManager(EmbedTo_Dialog, m_pActionPool,
-                                                                       m_comGuest, this);
-
-    if (pWidget)
-    {
-        /* Configure widget: */
-        setWidget(pWidget);
-        setWidgetMenu(pWidget->menu());
-#ifdef VBOX_WS_MAC
-        setWidgetToolbar(pWidget->toolbar());
-#endif
-        connect(pWidget, &UIGuestControlFileManager::sigSetCloseButtonShortCut,
-                this, &UIGuestControlFileManagerDialog::sltSetCloseButtonShortCut);
-
-        /* Add into layout: */
-        centralWidget()->layout()->addWidget(pWidget);
-    }
-}
-
-void UIGuestControlFileManagerDialog::finalize()
-{
-    /* Apply language settings: */
-    retranslateUi();
-    manageEscapeShortCut();
-}
-
-void UIGuestControlFileManagerDialog::loadSettings()
-{
-    const QRect desktopRect = gpDesktop->availableGeometry(this);
-    int iDefaultWidth = desktopRect.width() / 2;
-    int iDefaultHeight = desktopRect.height() * 3 / 4;
-
-    QRect defaultGeometry(0, 0, iDefaultWidth, iDefaultHeight);
-    if (centerWidget())
-        defaultGeometry.moveCenter(centerWidget()->geometry().center());
-
-    /* Load geometry from extradata: */
-    QRect geometry = gEDataManager->guestControlFileManagerDialogGeometry(this, defaultGeometry);
-
-    /* Restore geometry: */
-    LogRel2(("GUI: UIGuestControlFileManagerDialog: Restoring geometry to: Origin=%dx%d, Size=%dx%d\n",
-             geometry.x(), geometry.y(), geometry.width(), geometry.height()));
-    setDialogGeometry(geometry);
-}
-
-void UIGuestControlFileManagerDialog::saveSettings() const
-{
-    /* Save window geometry to extradata: */
-    const QRect saveGeometry = geometry();
-#ifdef VBOX_WS_MAC
-    /* darwinIsWindowMaximized expects a non-const QWidget*. thus const_cast: */
-    QWidget *pw = const_cast<QWidget*>(qobject_cast<const QWidget*>(this));
-    gEDataManager->setGuestControlFileManagerDialogGeometry(saveGeometry, ::darwinIsWindowMaximized(pw));
-#else /* !VBOX_WS_MAC */
-    gEDataManager->setGuestControlFileManagerDialogGeometry(saveGeometry, isMaximized());
-#endif /* !VBOX_WS_MAC */
-    LogRel2(("GUI: Guest Control File Manager Dialog: Geometry saved as: Origin=%dx%d, Size=%dx%d\n",
-             saveGeometry.x(), saveGeometry.y(), saveGeometry.width(), saveGeometry.height()));
-}
-
-bool UIGuestControlFileManagerDialog::shouldBeMaximized() const
-{
-    return gEDataManager->guestControlFileManagerDialogShouldBeMaximized();
-}
-
-void UIGuestControlFileManagerDialog::sltSetCloseButtonShortCut(QKeySequence shortcut)
-{
-    if (button(ButtonType_Close))
-        button(ButtonType_Close)->setShortcut(shortcut);
-}
-
-void UIGuestControlFileManagerDialog::manageEscapeShortCut()
-{
-    UIGuestControlFileManager *pWidget = qobject_cast<UIGuestControlFileManager*>(widget());
-    if (!pWidget)
-        return;
-    pWidget->manageEscapeShortCut();
-}
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerDialog.h	(revision 76176)
+++ 	(revision )
@@ -1,114 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIGuestControlFileManagerDialog class declaration.
- */
-
-/*
- * Copyright (C) 2010-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIGuestControlFileManagerDialog_h___
-#define ___UIGuestControlFileManagerDialog_h___
-
-/* Qt includes: */
-#include <QString>
-
-/* GUI includes: */
-#include "QIManagerDialog.h"
-#include "QIWithRetranslateUI.h"
-
-/* COM includes: */
-#include "COMEnums.h"
-#include "CGuest.h"
-
-/* Forward declarations: */
-class QDialogButtonBox;
-class QVBoxLayout;
-class UIActionPool;
-class UIGuestControlFileManagerDialog;
-class CGuest;
-
-
-/** QIManagerDialogFactory extension used as a factory for the Guest Control dialog. */
-class UIGuestControlFileManagerDialogFactory : public QIManagerDialogFactory
-{
-public:
-
-    UIGuestControlFileManagerDialogFactory(UIActionPool *pActionPool = 0, const CGuest &comGuest = CGuest(), const QString &strMachineName = QString());
-
-protected:
-
-    /** Creates derived @a pDialog instance.
-      * @param  pCenterWidget  Passes the widget to center wrt. pCenterWidget. */
-    virtual void create(QIManagerDialog *&pDialog, QWidget *pCenterWidget) /* override */;
-
-    UIActionPool *m_pActionPool;
-    CGuest        m_comGuest;
-    QString       m_strMachineName;
-};
-
-
-/** QIManagerDialog extension providing GUI with the dialog displaying guest control releated logs. */
-class UIGuestControlFileManagerDialog : public QIWithRetranslateUI<QIManagerDialog>
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs Guest Control dialog.
-      * @param  pCenterWidget  Passes the widget reference to center according to.
-      * @param  pActionPool    Passes the action-pool reference.
-      * @param  comGuest       Passes the com-guest reference. */
-    UIGuestControlFileManagerDialog(QWidget *pCenterWidget, UIActionPool *pActionPool, const CGuest &comGuest, const QString &strMachineName = QString());
-
-protected:
-
-    /** @name Event-handling stuff.
-      * @{ */
-        /** Handles translation event. */
-        virtual void retranslateUi() /* override */;
-    /** @} */
-
-    /** @name Prepare/cleanup cascade.
-     * @{ */
-        /** Configures all. */
-        virtual void configure() /* override */;
-        /** Configures central-widget. */
-        virtual void configureCentralWidget() /* override */;
-        /** Perform final preparations. */
-        virtual void finalize() /* override */;
-        /** Loads dialog setting such as geometry from extradata. */
-        virtual void loadSettings() /* override */;
-
-        /** Saves dialog setting into extradata. */
-        virtual void saveSettings() const /* override */;
-    /** @} */
-
-    /** @name Functions related to geometry restoration.
-     * @{ */
-        /** Returns whether the window should be maximized when geometry being restored. */
-        virtual bool shouldBeMaximized() const /* override */;
-    /** @} */
-
-private slots:
-
-    void sltSetCloseButtonShortCut(QKeySequence shortcut);
-
-private:
-
-    void manageEscapeShortCut();
-    UIActionPool *m_pActionPool;
-    CGuest      m_comGuest;
-    QString     m_strMachineName;
-};
-
-
-#endif /* !___UIGuestControlFileManagerDialog_h___ */
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerLogPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerLogPanel.cpp	(revision 76176)
+++ 	(revision )
@@ -1,138 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVMLogViewer class implementation.
- */
-
-/*
- * Copyright (C) 2010-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QHBoxLayout>
-# include <QMenu>
-# include <QSpinBox>
-# include <QTextEdit>
-# include <QTime>
-
-/* GUI includes: */
-# include "QIToolButton.h"
-# include "UIIconPool.h"
-# include "UIGuestControlFileManager.h"
-# include "UIGuestControlFileManagerLogPanel.h"
-
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-
-/*********************************************************************************************************************************
-*   UIFileManagerLogViewer definition.                                                                                   *
-*********************************************************************************************************************************/
-
-class UIFileManagerLogViewer : public QTextEdit
-{
-
-    Q_OBJECT;
-
-public:
-
-    UIFileManagerLogViewer(QWidget *pParent = 0);
-
-protected:
-
-    virtual void contextMenuEvent(QContextMenuEvent * event) /* override */;
-
-private slots:
-
-    void sltClear();
-};
-
-/*********************************************************************************************************************************
-*   UIFileManagerLogViewer implementation.                                                                                   *
-*********************************************************************************************************************************/
-
-UIFileManagerLogViewer::UIFileManagerLogViewer(QWidget *pParent /* = 0 */)
-    :QTextEdit(pParent)
-{
-    setUndoRedoEnabled(false);
-    setReadOnly(true);
-}
-
-void UIFileManagerLogViewer::contextMenuEvent(QContextMenuEvent *event)
-{
-    QMenu *menu = createStandardContextMenu();
-
-    QAction *pClearAction = menu->addAction(UIGuestControlFileManager::tr("Clear"));
-    connect(pClearAction, &QAction::triggered, this, &UIFileManagerLogViewer::sltClear);
-    menu->exec(event->globalPos());
-    delete menu;
-}
-
-void UIFileManagerLogViewer::sltClear()
-{
-    clear();
-}
-
-
-/*********************************************************************************************************************************
-*   UIGuestControlFileManagerLogPanel implementation.                                                                            *
-*********************************************************************************************************************************/
-
-UIGuestControlFileManagerLogPanel::UIGuestControlFileManagerLogPanel(UIGuestControlFileManager *pManagerWidget, QWidget *pParent)
-    : UIGuestControlFileManagerPanel(pManagerWidget, pParent)
-    , m_pLogTextEdit(0)
-{
-    prepare();
-}
-
-void UIGuestControlFileManagerLogPanel::appendLog(const QString &strLog, FileManagerLogType eLogType)
-{
-    if (!m_pLogTextEdit)
-        return;
-    QString strColorTag("<font color=\"Black\">");
-    if (eLogType == FileManagerLogType_Error)
-    {
-        strColorTag = "<font color=\"Red\">";
-    }
-    QString strColoredLog = QString("%1 %2: %3 %4").arg(strColorTag).arg(QTime::currentTime().toString("hh:mm:ss")).arg(strLog).arg("</font>");
-    m_pLogTextEdit->append(strColoredLog);
-}
-
-QString UIGuestControlFileManagerLogPanel::panelName() const
-{
-    return "LogPanel";
-}
-
-void UIGuestControlFileManagerLogPanel::prepareWidgets()
-{
-    if (!mainLayout())
-        return;
-    m_pLogTextEdit = new UIFileManagerLogViewer;
-    if (m_pLogTextEdit)
-    {
-        mainLayout()->addWidget(m_pLogTextEdit);
-    }
-}
-
-void UIGuestControlFileManagerLogPanel::prepareConnections()
-{
-}
-
-void UIGuestControlFileManagerLogPanel::retranslateUi()
-{
-    UIGuestControlFileManagerPanel::retranslateUi();
-
-}
-
-
-#include "UIGuestControlFileManagerLogPanel.moc"
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerLogPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerLogPanel.h	(revision 76176)
+++ 	(revision )
@@ -1,56 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVMLogViewer class declaration.
- */
-
-/*
- * Copyright (C) 2010-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIGuestControlFileManagerLogPanel_h___
-#define ___UIGuestControlFileManagerLogPanel_h___
-
-/* GUI includes: */
-#include "UIGuestControlDefs.h"
-#include "UIGuestControlFileManagerPanel.h"
-
-/* Forward declarations: */
-class QTextEdit;
-class UIGuestControlFileManager;
-
-/** UIGuestControlFileManagerPanel extension to display file manager logs. */
-class UIGuestControlFileManagerLogPanel : public UIGuestControlFileManagerPanel
-{
-    Q_OBJECT;
-
-public:
-
-    UIGuestControlFileManagerLogPanel(UIGuestControlFileManager *pManagerWidget, QWidget *pParent);
-    void appendLog(const QString &str, FileManagerLogType);
-    virtual QString panelName() const /* override */;
-
-protected:
-
-    virtual void prepareWidgets() /* override */;
-    virtual void prepareConnections() /* override */;
-
-    /** Handles the translation event. */
-    void retranslateUi();
-
-private slots:
-
-
-private:
-
-    QTextEdit *m_pLogTextEdit;
-};
-
-#endif /* !___UIGuestControlFileManagerLogPanel_h___ */
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOperationsPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOperationsPanel.cpp	(revision 76176)
+++ 	(revision )
@@ -1,472 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVMLogViewer class implementation.
- */
-
-/*
- * Copyright (C) 2010-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QHBoxLayout>
-# include <QGridLayout>
-# include <QLabel>
-# include <QMenu>
-# include <QProgressBar>
-# include <QScrollArea>
-# include <QScrollBar>
-# include <QStyle>
-
-
-/* GUI includes: */
-# include "QIToolButton.h"
-# include "QILabel.h"
-# include "UIErrorString.h"
-# include "UIIconPool.h"
-# include "UIGuestControlFileManager.h"
-# include "UIGuestControlFileManagerOperationsPanel.h"
-# include "UIProgressEventHandler.h"
-
-/* COM includes: */
-# include "CProgress.h"
-
-
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-
-/*********************************************************************************************************************************
-*   UIFileOperationProgressWidget definition.                                                                                    *
-*********************************************************************************************************************************/
-
-class UIFileOperationProgressWidget : public QIWithRetranslateUI<QFrame>
-{
-
-    Q_OBJECT;
-
-public:
-
-    UIFileOperationProgressWidget(const CProgress &comProgress, QWidget *pParent = 0);
-    ~UIFileOperationProgressWidget();
-    bool isCompleted() const;
-    bool isCanceled() const;
-
-signals:
-
-    void sigProgressComplete(QUuid progressId);
-    void sigProgressFail(QString strErrorString, FileManagerLogType eLogType);
-    void sigFocusIn(QWidget *pWidget);
-    void sigFocusOut(QWidget *pWidget);
-
-protected:
-
-    virtual void retranslateUi() /* override */;
-    virtual void focusInEvent(QFocusEvent *pEvent) /* override */;
-    virtual void focusOutEvent(QFocusEvent *pEvent) /* override */;
-
-private slots:
-
-    void sltHandleProgressPercentageChange(const QUuid &uProgressId, const int iPercent);
-    void sltHandleProgressComplete(const QUuid &uProgressId);
-    void sltCancelProgress();
-
-private:
-    enum OperationStatus
-    {
-        OperationStatus_NotStarted,
-        OperationStatus_Working,
-        OperationStatus_Paused,
-        OperationStatus_Canceled,
-        OperationStatus_Succeded,
-        OperationStatus_Failed,
-        OperationStatus_Invalid,
-        OperationStatus_Max
-
-    };
-    void prepare();
-    void prepareWidgets();
-    void prepareEventHandler();
-    void cleanupEventHandler();
-
-    OperationStatus         m_eStatus;
-    CProgress               m_comProgress;
-    UIProgressEventHandler *m_pEventHandler;
-    QGridLayout            *m_pMainLayout;
-    QProgressBar           *m_pProgressBar;
-    QIToolButton           *m_pCancelButton;
-    QILabel                *m_pStatusLabel;
-    QILabel                *m_pPercentageLabel;
-};
-
-
-/*********************************************************************************************************************************
-*   UIFileOperationProgressWidget implementation.                                                                                *
-*********************************************************************************************************************************/
-
-UIFileOperationProgressWidget::UIFileOperationProgressWidget(const CProgress &comProgress, QWidget *pParent /* = 0 */)
-    : QIWithRetranslateUI<QFrame>(pParent)
-    , m_eStatus(OperationStatus_NotStarted)
-    , m_comProgress(comProgress)
-    , m_pEventHandler(0)
-    , m_pMainLayout(0)
-    , m_pProgressBar(0)
-    , m_pCancelButton(0)
-    , m_pStatusLabel(0)
-    , m_pPercentageLabel(0)
-{
-    prepare();
-    setFocusPolicy(Qt::ClickFocus);
-    setStyleSheet("QFrame:focus {  border-width: 1px; border-style: dashed; border-color: black; }");
-}
-
-UIFileOperationProgressWidget::~UIFileOperationProgressWidget()
-{
-    cleanupEventHandler();
-}
-
-bool UIFileOperationProgressWidget::isCompleted() const
-{
-    if (m_comProgress.isNull())
-        return true;
-    return m_comProgress.GetCompleted();
-}
-
-bool UIFileOperationProgressWidget::isCanceled() const
-{
-    if (m_comProgress.isNull())
-        return true;
-    return m_comProgress.GetCanceled();
-}
-
-void UIFileOperationProgressWidget::retranslateUi()
-{
-    if (m_pCancelButton)
-        m_pCancelButton->setToolTip(UIGuestControlFileManager::tr("Cancel"));
-
-    switch (m_eStatus)
-    {
-        case OperationStatus_NotStarted:
-            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Not yet started"));
-            break;
-        case OperationStatus_Working:
-            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Working"));
-            break;
-        case OperationStatus_Paused:
-            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Paused"));
-            break;
-        case OperationStatus_Canceled:
-            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Canceled"));
-            break;
-        case OperationStatus_Succeded:
-            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Succeded"));
-            break;
-        case OperationStatus_Failed:
-            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Failed"));
-            break;
-        case OperationStatus_Invalid:
-        case OperationStatus_Max:
-        default:
-            m_pStatusLabel->setText(UIGuestControlFileManager::tr("Invalid"));
-            break;
-    }
-}
-
-void UIFileOperationProgressWidget::focusInEvent(QFocusEvent *pEvent)
-{
-    QFrame::focusInEvent(pEvent);
-    emit sigFocusIn(this);
-}
-
-void UIFileOperationProgressWidget::focusOutEvent(QFocusEvent *pEvent)
-{
-    QFrame::focusOutEvent(pEvent);
-    emit sigFocusOut(this);
-}
-
-void UIFileOperationProgressWidget::prepare()
-{
-    prepareWidgets();
-    prepareEventHandler();
-    retranslateUi();
-}
-
-void UIFileOperationProgressWidget::prepareWidgets()
-{
-    m_pMainLayout = new QGridLayout;
-    if (!m_pMainLayout)
-        return;
-    //m_pMainLayout->setSpacing(0);
-
-    m_pProgressBar = new QProgressBar;
-    if (m_pProgressBar)
-    {
-        m_pProgressBar->setMinimum(0);
-        m_pProgressBar->setMaximum(100);
-        /* Hide the QProgressBar's text since in MacOS it never shows: */
-        m_pProgressBar->setTextVisible(false);
-        m_pMainLayout->addWidget(m_pProgressBar, 0, 0, 1, 2);
-    }
-
-    m_pCancelButton = new QIToolButton;
-    if (m_pCancelButton)
-    {
-        m_pCancelButton->setIcon(QApplication::style()->standardIcon(QStyle::SP_DockWidgetCloseButton));
-        connect(m_pCancelButton, &QIToolButton::clicked, this, &UIFileOperationProgressWidget::sltCancelProgress);
-        if (!m_comProgress.isNull() && !m_comProgress.GetCancelable())
-            m_pCancelButton->setEnabled(false);
-        m_pMainLayout->addWidget(m_pCancelButton, 0, 2, 1, 1);
-    }
-
-    m_pStatusLabel = new QILabel;
-    if (m_pStatusLabel)
-    {
-        m_pStatusLabel->setContextMenuPolicy(Qt::NoContextMenu);
-        m_pMainLayout->addWidget(m_pStatusLabel, 0, 3, 1, 1);
-    }
-
-    m_pPercentageLabel = new QILabel;
-    if (m_pPercentageLabel)
-    {
-        m_pPercentageLabel->setContextMenuPolicy(Qt::NoContextMenu);
-        m_pMainLayout->addWidget(m_pPercentageLabel, 1, 0, 1, 4);
-    }
-
-    setLayout(m_pMainLayout);
-    retranslateUi();
-}
-
-void UIFileOperationProgressWidget::prepareEventHandler()
-{
-    if (m_comProgress.isNull())
-        return;
-    m_pEventHandler = new UIProgressEventHandler(this, m_comProgress);
-    connect(m_pEventHandler, &UIProgressEventHandler::sigProgressPercentageChange,
-            this, &UIFileOperationProgressWidget::sltHandleProgressPercentageChange);
-    connect(m_pEventHandler, &UIProgressEventHandler::sigProgressTaskComplete,
-            this, &UIFileOperationProgressWidget::sltHandleProgressComplete);
-    m_eStatus = OperationStatus_Working;
-    retranslateUi();
-}
-
-void UIFileOperationProgressWidget::cleanupEventHandler()
-{
-    delete m_pEventHandler;
-    m_pEventHandler = 0;
-}
-
-void UIFileOperationProgressWidget::sltHandleProgressPercentageChange(const QUuid &uProgressId, const int iPercent)
-{
-    Q_UNUSED(uProgressId);
-    Q_UNUSED(iPercent);
-    m_pProgressBar->setValue(iPercent);
-    if (m_pPercentageLabel)
-        m_pPercentageLabel->setText(QString("%1%").arg(QString::number(iPercent)));
-}
-
-void UIFileOperationProgressWidget::sltHandleProgressComplete(const QUuid &uProgressId)
-{
-    Q_UNUSED(uProgressId);
-    if (m_pCancelButton)
-        m_pCancelButton->setEnabled(false);
-
-    if (!m_comProgress.isOk() || m_comProgress.GetResultCode() != 0)
-    {
-        emit sigProgressFail(UIErrorString::formatErrorInfo(m_comProgress), FileManagerLogType_Error);
-        m_eStatus = OperationStatus_Failed;
-    }
-    else
-    {
-        emit sigProgressComplete(m_comProgress.GetId());
-        m_eStatus = OperationStatus_Succeded;
-    }
-    if (m_pProgressBar)
-        m_pProgressBar->setEnabled(false);
-    cleanupEventHandler();
-    retranslateUi();
-}
-
-void UIFileOperationProgressWidget::sltCancelProgress()
-{
-    m_comProgress.Cancel();
-    /* Since we dont have a "progress canceled" event we have to do this here: */
-    if (m_pCancelButton)
-        m_pCancelButton->setEnabled(false);
-    if (m_pProgressBar)
-        m_pProgressBar->setEnabled(false);
-    m_eStatus = OperationStatus_Canceled;
-    cleanupEventHandler();
-    retranslateUi();
-}
-
-
-/*********************************************************************************************************************************
-*   UIGuestControlFileManagerOperationsPanel implementation.                                                                     *
-*********************************************************************************************************************************/
-
-UIGuestControlFileManagerOperationsPanel::UIGuestControlFileManagerOperationsPanel(UIGuestControlFileManager *pManagerWidget,
-                                                                                   QWidget *pParent)
-    : UIGuestControlFileManagerPanel(pManagerWidget, pParent)
-    , m_pScrollArea(0)
-    , m_pContainerWidget(0)
-    , m_pContainerLayout(0)
-    , m_pContainerSpaceItem(0)
-    , m_pWidgetInFocus(0)
-{
-    prepare();
-}
-
-void UIGuestControlFileManagerOperationsPanel::addNewProgress(const CProgress &comProgress)
-{
-    if (!m_pContainerLayout)
-        return;
-
-    UIFileOperationProgressWidget *pOperationsWidget = new UIFileOperationProgressWidget(comProgress);
-    if (!pOperationsWidget)
-        return;
-    m_widgetSet.insert(pOperationsWidget);
-    m_pContainerLayout->insertWidget(m_pContainerLayout->count() - 1, pOperationsWidget);
-
-    connect(pOperationsWidget, &UIFileOperationProgressWidget::sigProgressComplete,
-            this, &UIGuestControlFileManagerOperationsPanel::sigFileOperationComplete);
-    connect(pOperationsWidget, &UIFileOperationProgressWidget::sigProgressFail,
-            this, &UIGuestControlFileManagerOperationsPanel::sigFileOperationFail);
-
-    connect(pOperationsWidget, &UIFileOperationProgressWidget::sigFocusIn,
-            this, &UIGuestControlFileManagerOperationsPanel::sltHandleWidgetFocusIn);
-    connect(pOperationsWidget, &UIFileOperationProgressWidget::sigFocusOut,
-            this, &UIGuestControlFileManagerOperationsPanel::sltHandleWidgetFocusOut);
-}
-
-QString UIGuestControlFileManagerOperationsPanel::panelName() const
-{
-    return "OperationsPanel";
-}
-
-void UIGuestControlFileManagerOperationsPanel::prepareWidgets()
-{
-    if (!mainLayout())
-        return;
-
-
-    m_pScrollArea = new QScrollArea;
-    m_pContainerWidget = new QWidget;
-    m_pContainerLayout = new QVBoxLayout;
-    if (!m_pScrollArea || !m_pContainerWidget || !m_pContainerLayout)
-        return;
-
-    QScrollBar *pVerticalScrollBar = m_pScrollArea->verticalScrollBar();
-    if (pVerticalScrollBar)
-        QObject::connect(pVerticalScrollBar, &QScrollBar::rangeChanged, this, &UIGuestControlFileManagerOperationsPanel::sltScrollToBottom);
-
-    m_pScrollArea->setBackgroundRole(QPalette::Window);
-    m_pScrollArea->setWidgetResizable(true);
-
-    mainLayout()->addWidget(m_pScrollArea);
-
-    m_pScrollArea->setWidget(m_pContainerWidget);
-    m_pContainerWidget->setLayout(m_pContainerLayout);
-    m_pContainerLayout->addStretch(4);
-}
-
-void UIGuestControlFileManagerOperationsPanel::prepareConnections()
-{
-
-}
-
-void UIGuestControlFileManagerOperationsPanel::retranslateUi()
-{
-    UIGuestControlFileManagerPanel::retranslateUi();
-}
-
-void UIGuestControlFileManagerOperationsPanel::contextMenuEvent(QContextMenuEvent *pEvent)
-{
-    QMenu *menu = new QMenu(this);
-
-    if (m_pWidgetInFocus)
-    {
-        QAction *pRemoveSelected = menu->addAction(UIGuestControlFileManager::tr("Remove Selected"));
-        connect(pRemoveSelected, &QAction::triggered,
-                this, &UIGuestControlFileManagerOperationsPanel::sltRemoveSelected);
-    }
-
-    QAction *pRemoveFinished = menu->addAction(UIGuestControlFileManager::tr("Remove Finished"));
-    QAction *pRemoveAll = menu->addAction(UIGuestControlFileManager::tr("Remove All"));
-
-    connect(pRemoveFinished, &QAction::triggered,
-            this, &UIGuestControlFileManagerOperationsPanel::sltRemoveFinished);
-    connect(pRemoveAll, &QAction::triggered,
-            this, &UIGuestControlFileManagerOperationsPanel::sltRemoveAll);
-
-    menu->exec(pEvent->globalPos());
-    delete menu;
-}
-
-void UIGuestControlFileManagerOperationsPanel::sltRemoveFinished()
-{
-    QList<UIFileOperationProgressWidget*> widgetsToRemove;
-    foreach (QWidget *pWidget, m_widgetSet)
-    {
-        UIFileOperationProgressWidget *pProgressWidget = qobject_cast<UIFileOperationProgressWidget*>(pWidget);
-        if (pProgressWidget && pProgressWidget->isCompleted())
-        {
-            delete pProgressWidget;
-            widgetsToRemove << pProgressWidget;
-        }
-    }
-    foreach (UIFileOperationProgressWidget *pWidget, widgetsToRemove)
-        m_widgetSet.remove(pWidget);
-}
-
-void UIGuestControlFileManagerOperationsPanel::sltRemoveAll()
-{
-    foreach (QWidget *pWidget, m_widgetSet)
-    {
-        if (pWidget)
-        {
-            delete pWidget;
-        }
-    }
-    m_widgetSet.clear();
-}
-
-void UIGuestControlFileManagerOperationsPanel::sltRemoveSelected()
-{
-    if (!m_pWidgetInFocus)
-        return;
-    delete m_pWidgetInFocus;
-    m_widgetSet.remove(m_pWidgetInFocus);
-}
-
-void UIGuestControlFileManagerOperationsPanel::sltHandleWidgetFocusIn(QWidget *pWidget)
-{
-    if (!pWidget)
-        return;
-    m_pWidgetInFocus = pWidget;
-}
-
-void UIGuestControlFileManagerOperationsPanel::sltHandleWidgetFocusOut(QWidget *pWidget)
-{
-    if (!pWidget)
-        return;
-    m_pWidgetInFocus = 0;
-}
-
-void UIGuestControlFileManagerOperationsPanel::sltScrollToBottom(int iMin, int iMax)
-{
-    Q_UNUSED(iMin);
-    if (m_pScrollArea)
-    m_pScrollArea->verticalScrollBar()->setValue(iMax);
-}
-
-#include "UIGuestControlFileManagerOperationsPanel.moc"
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOperationsPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOperationsPanel.h	(revision 76176)
+++ 	(revision )
@@ -1,94 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVMLogViewer class declaration.
- */
-
-/*
- * Copyright (C) 2010-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIGuestControlFileManagerOperationsPanel_h___
-#define ___UIGuestControlFileManagerOperationsPanel_h___
-
-/* Qt includes: */
-# include <QUuid>
-
-/* GUI includes: */
-#include "UIGuestControlDefs.h"
-#include "UIGuestControlFileManagerPanel.h"
-
-/* Forward declarations: */
-class CProgress;
-class QScrollArea;
-class QSpacerItem;
-class QVBoxLayout;
-
-class UIFileOperationModel;
-class UIFileOperationProgressWidget;
-class UIGuestControlFileManager;
-
-
-/** UIVMLogViewerPanel extension hosting a QListWidget which in turn has a special QWidget extension
-  * to manage multiple CProgress instances. This is particulary used in monitoring file operations. */
-class UIGuestControlFileManagerOperationsPanel : public UIGuestControlFileManagerPanel
-{
-    Q_OBJECT;
-
-signals:
-
-    void sigFileOperationComplete(QUuid progressId);
-    void sigFileOperationFail(QString strErrorString, FileManagerLogType eLogType);
-
-public:
-
-    UIGuestControlFileManagerOperationsPanel(UIGuestControlFileManager *pManagerWidget, QWidget *pParent);
-    virtual QString panelName() const /* override */;
-    void addNewProgress(const CProgress &comProgress);
-
-protected:
-
-    /** @name Preparation specific functions.
-      * @{ */
-        virtual void prepareWidgets() /* override */;
-        virtual void prepareConnections() /* override */;
-    /** @} */
-
-    /** Handles the translation event. */
-    virtual void retranslateUi() /* override */;
-    virtual void contextMenuEvent(QContextMenuEvent *pEvent) /* override */;
-
-private slots:
-
-    void sltRemoveFinished();
-    void sltRemoveAll();
-    void sltRemoveSelected();
-
-    void sltHandleWidgetFocusIn(QWidget *pWidget);
-    void sltHandleWidgetFocusOut(QWidget *pWidget);
-    void sltScrollToBottom(int iMin, int iMax);
-
-private:
-
-    /** @name Member variables.
-      * @{ */
-        QScrollArea    *m_pScrollArea;
-        QWidget        *m_pContainerWidget;
-        QVBoxLayout    *m_pContainerLayout;
-        QSpacerItem    *m_pContainerSpaceItem;
-        QWidget        *m_pWidgetInFocus;
-        QSet<QWidget*>  m_widgetSet;
-    /** @} */
-
-
-
-};
-
-#endif /* !___UIGuestControlFileManagerOperationsPanel_h___ */
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOptionsPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOptionsPanel.cpp	(revision 76176)
+++ 	(revision )
@@ -1,177 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVMLogViewer class implementation.
- */
-
-/*
- * Copyright (C) 2010-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QComboBox>
-# include <QHBoxLayout>
-# include <QFontDatabase>
-# include <QFontDialog>
-# include <QCheckBox>
-# include <QLabel>
-# include <QSpinBox>
-
-/* GUI includes: */
-# include "QIToolButton.h"
-# include "UIIconPool.h"
-# include "UIGuestControlFileManager.h"
-# include "UIGuestControlFileManagerOptionsPanel.h"
-
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-UIGuestControlFileManagerOptionsPanel::UIGuestControlFileManagerOptionsPanel(UIGuestControlFileManager *pManagerWidget,
-                                                                               QWidget *pParent, UIGuestControlFileManagerOptions *pFileManagerOptions)
-    : UIGuestControlFileManagerPanel(pManagerWidget, pParent)
-    , m_pListDirectoriesOnTopCheckBox(0)
-    , m_pDeleteConfirmationCheckBox(0)
-    , m_pHumanReabableSizesCheckBox(0)
-    , m_pFileManagerOptions(pFileManagerOptions)
-{
-    prepare();
-}
-
-QString UIGuestControlFileManagerOptionsPanel::panelName() const
-{
-    return "OptionsPanel";
-}
-
-void UIGuestControlFileManagerOptionsPanel::update()
-{
-    if (!m_pFileManagerOptions)
-        return;
-
-    if (m_pListDirectoriesOnTopCheckBox)
-    {
-        m_pListDirectoriesOnTopCheckBox->blockSignals(true);
-        m_pListDirectoriesOnTopCheckBox->setChecked(m_pFileManagerOptions->bListDirectoriesOnTop);
-        m_pListDirectoriesOnTopCheckBox->blockSignals(false);
-    }
-
-    if (m_pDeleteConfirmationCheckBox)
-    {
-        m_pDeleteConfirmationCheckBox->blockSignals(true);
-        m_pDeleteConfirmationCheckBox->setChecked(m_pFileManagerOptions->bAskDeleteConfirmation);
-        m_pDeleteConfirmationCheckBox->blockSignals(false);
-    }
-
-    if (m_pHumanReabableSizesCheckBox)
-    {
-        m_pHumanReabableSizesCheckBox->blockSignals(true);
-        m_pHumanReabableSizesCheckBox->setChecked(m_pFileManagerOptions->bShowHumanReadableSizes);
-        m_pHumanReabableSizesCheckBox->blockSignals(false);
-    }
-}
-
-void UIGuestControlFileManagerOptionsPanel::prepareWidgets()
-{
-    if (!mainLayout())
-        return;
-
-    m_pListDirectoriesOnTopCheckBox = new QCheckBox;
-    if (m_pListDirectoriesOnTopCheckBox)
-    {
-        mainLayout()->addWidget(m_pListDirectoriesOnTopCheckBox, 0, Qt::AlignLeft);
-    }
-
-    m_pDeleteConfirmationCheckBox = new QCheckBox;
-    if (m_pDeleteConfirmationCheckBox)
-    {
-        mainLayout()->addWidget(m_pDeleteConfirmationCheckBox, 0, Qt::AlignLeft);
-    }
-
-    m_pHumanReabableSizesCheckBox = new QCheckBox;
-    if (m_pHumanReabableSizesCheckBox)
-    {
-        mainLayout()->addWidget(m_pHumanReabableSizesCheckBox, 0, Qt::AlignLeft);
-    }
-    /* Set initial checkbox status wrt. options: */
-    if (m_pFileManagerOptions)
-    {
-        if (m_pListDirectoriesOnTopCheckBox)
-            m_pListDirectoriesOnTopCheckBox->setChecked(m_pFileManagerOptions->bListDirectoriesOnTop);
-        if (m_pDeleteConfirmationCheckBox)
-            m_pDeleteConfirmationCheckBox->setChecked(m_pFileManagerOptions->bAskDeleteConfirmation);
-        if (m_pHumanReabableSizesCheckBox)
-            m_pHumanReabableSizesCheckBox->setChecked(m_pFileManagerOptions->bShowHumanReadableSizes);
-    }
-    retranslateUi();
-    mainLayout()->addStretch(2);
-}
-
-void UIGuestControlFileManagerOptionsPanel::sltListDirectoryCheckBoxToogled(bool bChecked)
-{
-    if (!m_pFileManagerOptions)
-        return;
-    m_pFileManagerOptions->bListDirectoriesOnTop = bChecked;
-    emit sigOptionsChanged();
-}
-
-void UIGuestControlFileManagerOptionsPanel::sltDeleteConfirmationCheckBoxToogled(bool bChecked)
-{
-    if (!m_pFileManagerOptions)
-        return;
-    m_pFileManagerOptions->bAskDeleteConfirmation = bChecked;
-    emit sigOptionsChanged();
-}
-
-void UIGuestControlFileManagerOptionsPanel::sltHumanReabableSizesCheckBoxToogled(bool bChecked)
-{
-    if (!m_pFileManagerOptions)
-        return;
-    m_pFileManagerOptions->bShowHumanReadableSizes = bChecked;
-    emit sigOptionsChanged();
-}
-
-void UIGuestControlFileManagerOptionsPanel::prepareConnections()
-{
-    if (m_pListDirectoriesOnTopCheckBox)
-        connect(m_pListDirectoriesOnTopCheckBox, &QCheckBox::toggled,
-                this, &UIGuestControlFileManagerOptionsPanel::sltListDirectoryCheckBoxToogled);
-    if (m_pDeleteConfirmationCheckBox)
-        connect(m_pDeleteConfirmationCheckBox, &QCheckBox::toggled,
-                this, &UIGuestControlFileManagerOptionsPanel::sltDeleteConfirmationCheckBoxToogled);
-    if (m_pHumanReabableSizesCheckBox)
-        connect(m_pHumanReabableSizesCheckBox, &QCheckBox::toggled,
-                this, &UIGuestControlFileManagerOptionsPanel::sltHumanReabableSizesCheckBoxToogled);
-}
-
-void UIGuestControlFileManagerOptionsPanel::retranslateUi()
-{
-    UIGuestControlFileManagerPanel::retranslateUi();
-    if (m_pListDirectoriesOnTopCheckBox)
-    {
-        m_pListDirectoriesOnTopCheckBox->setText(UIGuestControlFileManager::tr("List directories on top"));
-        m_pListDirectoriesOnTopCheckBox->setToolTip(UIGuestControlFileManager::tr("List directories before files"));
-    }
-
-    if (m_pDeleteConfirmationCheckBox)
-    {
-        m_pDeleteConfirmationCheckBox->setText(UIGuestControlFileManager::tr("Ask before delete"));
-        m_pDeleteConfirmationCheckBox->setToolTip(UIGuestControlFileManager::tr("Show a confirmation dialog "
-                                                                                "before deleting files and directories"));
-    }
-
-    if (m_pHumanReabableSizesCheckBox)
-    {
-        m_pHumanReabableSizesCheckBox->setText(UIGuestControlFileManager::tr("Human readable sizes"));
-        m_pHumanReabableSizesCheckBox->setToolTip(UIGuestControlFileManager::tr("Show file/directory sizes in human "
-                                                                                "readable format rather than in bytes"));
-    }
-}
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOptionsPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerOptionsPanel.h	(revision 76176)
+++ 	(revision )
@@ -1,72 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVMLogViewer class declaration.
- */
-
-/*
- * Copyright (C) 2010-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIGuestControlFileManagerOptionsPanel_h___
-#define ___UIGuestControlFileManagerOptionsPanel_h___
-
-/* GUI includes: */
-#include "UIGuestControlFileManagerPanel.h"
-
-/* Forward declarations: */
-class QCheckBox;
-class QSpinBox;
-class QLabel;
-class QIToolButton;
-class UIGuestControlFileManagerOptions;
-
-/** UIGuestControlFileManagerPanel extension to change file manager options. It directly
- *  modifies the options through the passed UIGuestControlFileManagerOptions instance. */
-class UIGuestControlFileManagerOptionsPanel : public UIGuestControlFileManagerPanel
-{
-    Q_OBJECT;
-
-public:
-
-    UIGuestControlFileManagerOptionsPanel(UIGuestControlFileManager *pManagerWidget,
-                                           QWidget *pParent, UIGuestControlFileManagerOptions *pFileManagerOptions);
-    virtual QString panelName() const /* override */;
-    /** Reads the file manager options and updates the widget accordingly. This functions is typically called
-     *  when file manager options have been changed by other means and this panel needs to adapt. */
-    void update();
-
-signals:
-
-    void sigOptionsChanged();
-
-protected:
-
-    virtual void prepareWidgets() /* override */;
-    virtual void prepareConnections() /* override */;
-
-    /** Handles the translation event. */
-    void retranslateUi();
-
-private slots:
-
-    void sltListDirectoryCheckBoxToogled(bool bChecked);
-    void sltDeleteConfirmationCheckBoxToogled(bool bChecked);
-    void sltHumanReabableSizesCheckBoxToogled(bool bChecked);
-
-private:
-
-    QCheckBox  *m_pListDirectoriesOnTopCheckBox;
-    QCheckBox  *m_pDeleteConfirmationCheckBox;
-    QCheckBox  *m_pHumanReabableSizesCheckBox;
-    UIGuestControlFileManagerOptions *m_pFileManagerOptions;
-};
-
-#endif /* !___UIGuestControlFileManagerOptionsPanel_h___ */
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerPanel.cpp	(revision 76176)
+++ 	(revision )
@@ -1,129 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVMLogViewer class implementation.
- */
-
-/*
- * Copyright (C) 2010-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QComboBox>
-# include <QHBoxLayout>
-# include <QLabel>
-# include <QPlainTextEdit>
-# include <QTextCursor>
-# include <QToolButton>
-
-/* GUI includes: */
-# include "QIToolButton.h"
-# include "UIIconPool.h"
-# include "UIGuestControlFileManager.h"
-# include "UIGuestControlFileManagerPanel.h"
-# ifdef VBOX_WS_MAC
-#  include "VBoxUtils-darwin.h"
-# endif
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-
-UIGuestControlFileManagerPanel::UIGuestControlFileManagerPanel(UIGuestControlFileManager *pManagerWidget, QWidget *pParent)
-    : QIWithRetranslateUI<QWidget>(pParent)
-    , m_pMainLayout(0)
-    , m_pCloseButton(0)
-    , m_pFileManager(pManagerWidget)
-{
-    prepare();
-}
-
-void UIGuestControlFileManagerPanel::setCloseButtonShortCut(QKeySequence shortCut)
-{
-    if (!m_pCloseButton)
-        return;
-    m_pCloseButton->setShortcut(shortCut);
-}
-
-QHBoxLayout* UIGuestControlFileManagerPanel::mainLayout()
-{
-    return m_pMainLayout;
-}
-
-void UIGuestControlFileManagerPanel::prepare()
-{
-    prepareWidgets();
-    prepareConnections();
-    retranslateUi();
-}
-
-void UIGuestControlFileManagerPanel::prepareWidgets()
-{
-    m_pMainLayout = new QHBoxLayout(this);
-    if (m_pMainLayout)
-    {
-#ifdef VBOX_WS_MAC
-        m_pMainLayout->setContentsMargins(5 /* since there is always a button */, 0, 10 /* standard */, 0);
-        m_pMainLayout->setSpacing(10);
-#else
-        m_pMainLayout->setContentsMargins(qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 2, 0,
-                                          qApp->style()->pixelMetric(QStyle::PM_LayoutRightMargin) / 2,
-                                          qApp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin) / 2);
-        m_pMainLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing));
-#endif
-    }
-    m_pCloseButton = new QIToolButton;
-    if (m_pCloseButton)
-    {
-        m_pCloseButton->setIcon(UIIconPool::iconSet(":/close_16px.png"));
-        m_pMainLayout->addWidget(m_pCloseButton, 0, Qt::AlignLeft);
-    }
-}
-
-void UIGuestControlFileManagerPanel::prepareConnections()
-{
-    if (m_pCloseButton)
-        connect(m_pCloseButton, &QIToolButton::clicked, this, &UIGuestControlFileManagerPanel::hide);
-}
-
-void UIGuestControlFileManagerPanel::retranslateUi()
-{
-    if (m_pCloseButton)
-        m_pCloseButton->setToolTip(UIGuestControlFileManager::tr("Close the pane"));
-}
-
-bool UIGuestControlFileManagerPanel::eventFilter(QObject *pObject, QEvent *pEvent)
-{
-    Q_UNUSED(pObject);
-    Q_UNUSED(pEvent);
-    /* Dont consume this event. Pass it back to Qt's event system: */
-    return false;
-}
-
-void UIGuestControlFileManagerPanel::showEvent(QShowEvent *pEvent)
-{
-    QWidget::showEvent(pEvent);
-}
-
-void UIGuestControlFileManagerPanel::hideEvent(QHideEvent *pEvent)
-{
-    /* Get focused widget: */
-    QWidget *pFocus = QApplication::focusWidget();
-    /* If focus-widget is valid and child-widget of search-panel,
-     * focus next child-widget in line: */
-    if (pFocus && pFocus->parent() == this)
-        focusNextPrevChild(true);
-    if (m_pFileManager)
-        m_pFileManager->hidePanel(this);
-
-    QWidget::hideEvent(pEvent);
-}
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerPanel.h	(revision 76176)
+++ 	(revision )
@@ -1,75 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVMLogViewer class declaration.
- */
-
-/*
- * Copyright (C) 2010-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIGuestControlFileManagerPanel_h___
-#define ___UIGuestControlFileManagerPanel_h___
-
-/* Qt includes: */
-#include <QWidget>
-#include <QKeySequence>
-/* GUI includes: */
-#include "QIWithRetranslateUI.h"
-
-/* Forward declarations: */
-class QHBoxLayout;
-class QPlainTextEdit;
-class QTextDocument;
-class QIToolButton;
-class UIGuestControlFileManager;
-
-/** QWidget extension acting as the base class for UIVMLogViewerXXXPanel widgets. */
-class UIGuestControlFileManagerPanel : public QIWithRetranslateUI<QWidget>
-{
-    Q_OBJECT;
-
-public:
-
-    UIGuestControlFileManagerPanel(UIGuestControlFileManager *pManagerWidget, QWidget *pParent);
-    void setCloseButtonShortCut(QKeySequence shortCut);
-    virtual QString panelName() const = 0;
-
-protected:
-
-    virtual void prepare();
-    virtual void prepareWidgets();
-    virtual void prepareConnections();
-
-    /* Access functions for children classes. */
-    QHBoxLayout*               mainLayout();
-
-    /** Handles the translation event. */
-    void retranslateUi() /* override */;
-
-    /** Handles Qt @a pEvent, used for keyboard processing. */
-    bool eventFilter(QObject *pObject, QEvent *pEvent);
-    /** Handles the Qt show @a pEvent. */
-    void showEvent(QShowEvent *pEvent);
-    /** Handles the Qt hide @a pEvent. */
-    void hideEvent(QHideEvent *pEvent);
-
-    /* Return the unmodified log. */
-    const QString* logString() const;
-
-private:
-
-    /** Holds the reference to VM Log-Viewer this panel belongs to. */
-    QHBoxLayout         *m_pMainLayout;
-    QIToolButton        *m_pCloseButton;
-    UIGuestControlFileManager *m_pFileManager;
-};
-
-#endif /* !___UIGuestControlFileManagerPanel!_h___ */
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerSessionPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerSessionPanel.cpp	(revision 76176)
+++ 	(revision )
@@ -1,274 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVMLogViewer class implementation.
- */
-
-/*
- * Copyright (C) 2010-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QCheckBox>
-# include <QHBoxLayout>
-# include <QMenu>
-# include <QPushButton>
-# include <QSpinBox>
-# include <QTextEdit>
-
-/* GUI includes: */
-# include "QILineEdit.h"
-# include "QIToolButton.h"
-# include "UIIconPool.h"
-# include "UIGuestControlFileManager.h"
-# include "UIGuestControlFileManagerSessionPanel.h"
-
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-
-/*********************************************************************************************************************************
-*   UIGuestSessionCreateWidget definition.                                                                                   *
-*********************************************************************************************************************************/
-/** A QWidget extension containing text entry fields for password and username and buttons to
- *  start/stop a guest session. */
-class UIGuestSessionCreateWidget : public QIWithRetranslateUI<QWidget>
-{
-    Q_OBJECT;
-
-signals:
-
-    void sigCreateSession(QString strUserName, QString strPassword);
-    void sigCloseSession();
-
-public:
-
-    UIGuestSessionCreateWidget(QWidget *pParent = 0);
-    /** Disables certain widget after a guest session has been created. */
-    void switchSessionCreateMode();
-    /** Makes sure certain widgets are enabled so that a guest session can be created. */
-    void switchSessionCloseMode();
-
-protected:
-
-    void retranslateUi();
-    void keyPressEvent(QKeyEvent * pEvent);
-
-private slots:
-
-    void sltCreateButtonClick();
-    void sltShowHidePassword(bool flag);
-
-private:
-
-    void          prepareWidgets();
-    QILineEdit   *m_pUserNameEdit;
-    QILineEdit   *m_pPasswordEdit;
-    QPushButton  *m_pCreateButton;
-    QPushButton  *m_pCloseButton;
-    QHBoxLayout  *m_pMainLayout;
-    QCheckBox    *m_pShowPasswordCheckBox;
-};
-
-
-/*********************************************************************************************************************************
-*   UIGuestSessionCreateWidget implementation.                                                                                   *
-*********************************************************************************************************************************/
-
-UIGuestSessionCreateWidget::UIGuestSessionCreateWidget(QWidget *pParent /* = 0 */)
-    : QIWithRetranslateUI<QWidget>(pParent)
-    , m_pUserNameEdit(0)
-    , m_pPasswordEdit(0)
-    , m_pCreateButton(0)
-    , m_pCloseButton(0)
-    , m_pMainLayout(0)
-    , m_pShowPasswordCheckBox(0)
-{
-    prepareWidgets();
-}
-
-void UIGuestSessionCreateWidget::prepareWidgets()
-{
-    m_pMainLayout = new QHBoxLayout(this);
-    if (!m_pMainLayout)
-        return;
-
-    m_pUserNameEdit = new QILineEdit;
-    if (m_pUserNameEdit)
-    {
-        m_pMainLayout->addWidget(m_pUserNameEdit, 2);
-        m_pUserNameEdit->setPlaceholderText("User Name");
-    }
-
-    m_pPasswordEdit = new QILineEdit;
-    if (m_pPasswordEdit)
-    {
-        m_pMainLayout->addWidget(m_pPasswordEdit, 2);
-        m_pPasswordEdit->setPlaceholderText(UIGuestControlFileManager::tr("Password"));
-        m_pPasswordEdit->setEchoMode(QLineEdit::Password);
-    }
-
-    m_pShowPasswordCheckBox = new QCheckBox;
-    if (m_pShowPasswordCheckBox)
-    {
-        m_pShowPasswordCheckBox->setText(UIGuestControlFileManager::tr("Show Password"));
-        m_pMainLayout->addWidget(m_pShowPasswordCheckBox);
-        connect(m_pShowPasswordCheckBox, &QCheckBox::toggled,
-                this, &UIGuestSessionCreateWidget::sltShowHidePassword);
-    }
-
-    m_pCreateButton = new QPushButton;
-    if (m_pCreateButton)
-    {
-        m_pMainLayout->addWidget(m_pCreateButton);
-        connect(m_pCreateButton, &QPushButton::clicked, this, &UIGuestSessionCreateWidget::sltCreateButtonClick);
-    }
-
-    m_pCloseButton = new QPushButton;
-    if (m_pCloseButton)
-    {
-        m_pMainLayout->addWidget(m_pCloseButton);
-        connect(m_pCloseButton, &QPushButton::clicked, this, &UIGuestSessionCreateWidget::sigCloseSession);
-    }
-    m_pMainLayout->insertStretch(-1, 1);
-    retranslateUi();
-}
-
-void UIGuestSessionCreateWidget::sltCreateButtonClick()
-{
-    if (m_pUserNameEdit && m_pPasswordEdit)
-        emit sigCreateSession(m_pUserNameEdit->text(), m_pPasswordEdit->text());
-}
-
-void UIGuestSessionCreateWidget::sltShowHidePassword(bool flag)
-{
-    if (!m_pPasswordEdit)
-        return;
-    if (flag)
-        m_pPasswordEdit->setEchoMode(QLineEdit::Normal);
-    else
-        m_pPasswordEdit->setEchoMode(QLineEdit::Password);
-}
-
-void UIGuestSessionCreateWidget::retranslateUi()
-{
-    if (m_pUserNameEdit)
-    {
-        m_pUserNameEdit->setToolTip(UIGuestControlFileManager::tr("User name to authenticate session creation"));
-        m_pUserNameEdit->setPlaceholderText(UIGuestControlFileManager::tr("User Name"));
-
-    }
-    if (m_pPasswordEdit)
-    {
-        m_pPasswordEdit->setToolTip(UIGuestControlFileManager::tr("Password to authenticate session creation"));
-        m_pPasswordEdit->setPlaceholderText(UIGuestControlFileManager::tr("Password"));
-    }
-
-    if (m_pCreateButton)
-        m_pCreateButton->setText(UIGuestControlFileManager::tr("Create Session"));
-    if (m_pCloseButton)
-        m_pCloseButton->setText(UIGuestControlFileManager::tr("Close Session"));
-}
-
-void UIGuestSessionCreateWidget::keyPressEvent(QKeyEvent * pEvent)
-{
-    /* Emit sigCreateSession upon enter press: */
-    if (pEvent->key() == Qt::Key_Enter || pEvent->key() == Qt::Key_Return)
-    {
-        if ((m_pUserNameEdit && m_pUserNameEdit->hasFocus()) ||
-            (m_pPasswordEdit && m_pPasswordEdit->hasFocus()))
-            sigCreateSession(m_pUserNameEdit->text(), m_pPasswordEdit->text());
-    }
-    QWidget::keyPressEvent(pEvent);
-}
-
-void UIGuestSessionCreateWidget::switchSessionCreateMode()
-{
-    if (m_pUserNameEdit)
-        m_pUserNameEdit->setEnabled(true);
-    if (m_pPasswordEdit)
-        m_pPasswordEdit->setEnabled(true);
-    if (m_pCreateButton)
-        m_pCreateButton->setEnabled(true);
-    if (m_pCloseButton)
-        m_pCloseButton->setEnabled(false);
-}
-
-void UIGuestSessionCreateWidget::switchSessionCloseMode()
-{
-    if (m_pUserNameEdit)
-        m_pUserNameEdit->setEnabled(false);
-    if (m_pPasswordEdit)
-        m_pPasswordEdit->setEnabled(false);
-    if (m_pCreateButton)
-        m_pCreateButton->setEnabled(false);
-    if (m_pCloseButton)
-        m_pCloseButton->setEnabled(true);
-}
-
-
-/*********************************************************************************************************************************
-*   UIGuestControlFileManagerSessionPanel implementation.                                                                        *
-*********************************************************************************************************************************/
-
-UIGuestControlFileManagerSessionPanel::UIGuestControlFileManagerSessionPanel(UIGuestControlFileManager *pManagerWidget, QWidget *pParent)
-    : UIGuestControlFileManagerPanel(pManagerWidget, pParent)
-    , m_pSessionCreateWidget(0)
-{
-    prepare();
-}
-
-void UIGuestControlFileManagerSessionPanel::switchSessionCloseMode()
-{
-    if (m_pSessionCreateWidget)
-        m_pSessionCreateWidget->switchSessionCloseMode();
-}
-
-void UIGuestControlFileManagerSessionPanel::switchSessionCreateMode()
-{
-    if (m_pSessionCreateWidget)
-        m_pSessionCreateWidget->switchSessionCreateMode();
-}
-
-QString UIGuestControlFileManagerSessionPanel::panelName() const
-{
-    return "SessionPanel";
-}
-
-void UIGuestControlFileManagerSessionPanel::prepareWidgets()
-{
-    if (!mainLayout())
-        return;
-    m_pSessionCreateWidget = new UIGuestSessionCreateWidget;
-    if (m_pSessionCreateWidget)
-        mainLayout()->addWidget(m_pSessionCreateWidget);
-}
-
-void UIGuestControlFileManagerSessionPanel::prepareConnections()
-{
-    if (m_pSessionCreateWidget)
-    {
-        connect(m_pSessionCreateWidget, &UIGuestSessionCreateWidget::sigCreateSession,
-                this, &UIGuestControlFileManagerSessionPanel::sigCreateSession);
-        connect(m_pSessionCreateWidget, &UIGuestSessionCreateWidget::sigCloseSession,
-                this, &UIGuestControlFileManagerSessionPanel::sigCloseSession);
-    }
-}
-
-void UIGuestControlFileManagerSessionPanel::retranslateUi()
-{
-    UIGuestControlFileManagerPanel::retranslateUi();
-
-}
-
-#include "UIGuestControlFileManagerSessionPanel.moc"
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerSessionPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileManagerSessionPanel.h	(revision 76176)
+++ 	(revision )
@@ -1,60 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVMLogViewer class declaration.
- */
-
-/*
- * Copyright (C) 2010-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIGuestControlFileManagerSessionPanel_h___
-#define ___UIGuestControlFileManagerSessionPanel_h___
-
-/* GUI includes: */
-#include "UIGuestControlFileManagerPanel.h"
-
-/* Forward declarations: */
-class QTextEdit;
-class UIGuestControlFileManager;
-class UIGuestSessionCreateWidget;
-
-/** UIGuestControlFileManagerPanel extension providing GUI for creating/stopping a guest session. */
-class UIGuestControlFileManagerSessionPanel : public UIGuestControlFileManagerPanel
-{
-    Q_OBJECT;
-
-public:
-
-    UIGuestControlFileManagerSessionPanel(UIGuestControlFileManager *pManagerWidget, QWidget *pParent);
-    /** @name Enable/disable member widget wrt. guest session status.
-      * @{ */
-        void switchSessionCloseMode();
-        void switchSessionCreateMode();
-    /** @} */
-    virtual QString panelName() const /* override */;
-
-signals:
-
-    void sigCreateSession(QString strUserName, QString strPassword);
-    void sigCloseSession();
-
-protected:
-
-    virtual void prepareWidgets() /* override */;
-    virtual void prepareConnections() /* override */;
-    void retranslateUi();
-
-private:
-
-    UIGuestSessionCreateWidget *m_pSessionCreateWidget;
-};
-
-#endif /* !___UIGuestControlFileManagerSessionPanel_h___ */
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileModel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileModel.cpp	(revision 76176)
+++ 	(revision )
@@ -1,306 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIGuestControlFileModel class implementation.
- */
-
-/*
- * Copyright (C) 2016-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QDateTime>
-# include <QHeaderView>
-
-/* GUI includes: */
-# include "UIErrorString.h"
-# include "UIGuestControlFileModel.h"
-# include "UIGuestControlFileTable.h"
-# include "UIGuestControlFileManager.h"
-
-
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-const char* UIGuestControlFileModel::strUpDirectoryString = "..";
-
-UIGuestControlFileProxyModel::UIGuestControlFileProxyModel(QObject *parent /* = 0 */)
-    :QSortFilterProxyModel(parent)
-{
-}
-
-bool UIGuestControlFileProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
-{
-    UIFileTableItem *pLeftItem = static_cast<UIFileTableItem*>(left.internalPointer());
-    UIFileTableItem *pRightItem = static_cast<UIFileTableItem*>(right.internalPointer());
-
-    UIGuestControlFileManagerOptions *pOptions = UIGuestControlFileManagerOptions::instance();
-
-    if (pLeftItem && pRightItem)
-    {
-        /* List the directories before the files if options say so: */
-        if (pOptions && pOptions->bListDirectoriesOnTop)
-        {
-            if ((pLeftItem->isDirectory() || pLeftItem->isSymLinkToADirectory()) && !pRightItem->isDirectory())
-                return (sortOrder() == Qt::AscendingOrder);
-            if ((pRightItem->isDirectory() || pRightItem->isSymLinkToADirectory()) && !pLeftItem->isDirectory())
-                return (sortOrder() == Qt::DescendingOrder);
-        }
-        /* Up directory item should be always the first item: */
-        if (pLeftItem->isUpDirectory())
-            return (sortOrder() == Qt::AscendingOrder);
-        else if (pRightItem->isUpDirectory())
-            return (sortOrder() == Qt::DescendingOrder);
-
-        /* If the sort column is QDateTime than handle it correctly: */
-        if (sortColumn() == UIGuestControlFileModelColumn_ChangeTime)
-        {
-            QVariant dataLeft = pLeftItem->data(UIGuestControlFileModelColumn_ChangeTime);
-            QVariant dataRight = pRightItem->data(UIGuestControlFileModelColumn_ChangeTime);
-            QDateTime leftDateTime = dataLeft.toDateTime();
-            QDateTime rightDateTime = dataRight.toDateTime();
-            return (leftDateTime < rightDateTime);
-        }
-        /* When we show human readble sizes in size column sorting gets confused, so do it here: */
-        else if(sortColumn() == UIGuestControlFileModelColumn_Size)
-        {
-            qulonglong leftSize = pLeftItem->data(UIGuestControlFileModelColumn_Size).toULongLong();
-            qulonglong rightSize = pRightItem->data(UIGuestControlFileModelColumn_Size).toULongLong();
-            return (leftSize < rightSize);
-
-        }
-    }
-    return QSortFilterProxyModel::lessThan(left, right);
-}
-
-UIGuestControlFileModel::UIGuestControlFileModel(QObject *parent)
-    : QAbstractItemModel(parent)
-    , m_pParent(qobject_cast<UIGuestControlFileTable*>(parent))
-{
-}
-
-UIFileTableItem* UIGuestControlFileModel::rootItem() const
-{
-    if (!m_pParent)
-        return 0;
-    return m_pParent->m_pRootItem;
-}
-
-UIGuestControlFileModel::~UIGuestControlFileModel()
-{}
-
-int UIGuestControlFileModel::columnCount(const QModelIndex &parent) const
-{
-    if (parent.isValid())
-        return static_cast<UIFileTableItem*>(parent.internalPointer())->columnCount();
-    else
-    {
-        if (!rootItem())
-            return 0;
-        else
-            return rootItem()->columnCount();
-    }
-}
-
-bool UIGuestControlFileModel::setData(const QModelIndex &index, const QVariant &value, int role)
-{
-    if (index.isValid() && role == Qt::EditRole)
-    {
-        if (index.column() == 0 && value.canConvert(QMetaType::QString))
-        {
-            UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
-            if (!item || !m_pParent)
-                return false;
-            if (m_pParent->renameItem(item, value.toString()))
-            {
-                item->setData(value, index.column());
-                emit dataChanged(index, index);
-            }
-            else
-            {
-                if (m_pParent)
-                    m_pParent->emitLogOutput(QString(item->path()).append(" could not be renamed"), FileManagerLogType_Error);
-            }
-            return true;
-        }
-    }
-    return false;
-}
-
-QVariant UIGuestControlFileModel::data(const QModelIndex &index, int role) const
-{
-    if (!index.isValid())
-        return QVariant();
-    UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
-    if (!item)
-        return QVariant();
-
-    if (role == Qt::DisplayRole || role == Qt::EditRole)
-    {
-        /* dont show anything but the name for up directories: */
-        if (item->isUpDirectory() && index.column() != UIGuestControlFileModelColumn_Name)
-            return QVariant();
-        /* Format date/time column: */
-        if (item->data(index.column()).canConvert(QMetaType::QDateTime))
-        {
-            QDateTime dateTime = item->data(index.column()).toDateTime();
-            if (dateTime.isValid())
-                return dateTime.toString("dd.MM.yyyy hh:mm:ss");
-        }
-        /* Decide whether to show human-readable file object sizes: */
-        if (index.column() == UIGuestControlFileModelColumn_Size)
-        {
-            UIGuestControlFileManagerOptions* pOptions =
-                UIGuestControlFileManagerOptions::instance();
-            if (pOptions && pOptions->bShowHumanReadableSizes)
-            {
-                qulonglong size = item->data(index.column()).toULongLong();
-                return UIGuestControlFileTable::humanReadableSize(size);
-            }
-            else
-                return item->data(index.column());
-        }
-        return item->data(index.column());
-    }
-    /* Show the up directory array: */
-    if (role == Qt::DecorationRole && index.column() == 0)
-    {
-        if (item->isDirectory())
-        {
-            if (item->isUpDirectory())
-                return QIcon(":/arrow_up_10px_x2.png");
-            else if(item->isDriveItem())
-                return QIcon(":/hd_32px.png");
-            else
-                return QIcon(":/file_manager_folder_16px.png");
-        }
-        else if (item->isFile())
-            return QIcon(":/file_manager_file_16px.png");
-        else if (item->isSymLink())
-        {
-            if (item->isSymLinkToADirectory())
-                return QIcon(":/file_manager_folder_symlink_16px.png");
-            else
-                return QIcon(":/file_manager_file_symlink_16px.png");
-        }
-    }
-
-    return QVariant();
-}
-
-Qt::ItemFlags UIGuestControlFileModel::flags(const QModelIndex &index) const
-{
-    if (!index.isValid())
-        return 0;
-    UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
-    if (!item)
-        return QAbstractItemModel::flags(index);
-
-    if (!item->isUpDirectory() && index.column() == 0)
-        return QAbstractItemModel::flags(index)  | Qt::ItemIsEditable;
-    return QAbstractItemModel::flags(index);
-}
-
-QVariant UIGuestControlFileModel::headerData(int section, Qt::Orientation orientation,
-                               int role) const
-{
-    if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
-    {
-        if (!rootItem())
-            return QVariant();
-        else
-            return rootItem()->data(section);
-    }
-    return QVariant();
-}
-
-QModelIndex UIGuestControlFileModel::index(UIFileTableItem* item)
-{
-    if (!item)
-        return QModelIndex();
-    return createIndex(item->row(), 0, item);
-}
-
-QModelIndex UIGuestControlFileModel::index(int row, int column, const QModelIndex &parent)
-            const
-{
-    if (!hasIndex(row, column, parent))
-        return QModelIndex();
-
-    UIFileTableItem *parentItem;
-
-    if (!parent.isValid())
-        parentItem = rootItem();
-    else
-        parentItem = static_cast<UIFileTableItem*>(parent.internalPointer());
-    if (!parentItem)
-        return QModelIndex();
-
-    UIFileTableItem *childItem = parentItem->child(row);
-    if (childItem)
-        return createIndex(row, column, childItem);
-    else
-        return QModelIndex();
-}
-
-
-QModelIndex UIGuestControlFileModel::parent(const QModelIndex &index) const
-{
-    if (!index.isValid())
-        return QModelIndex();
-
-    UIFileTableItem *childItem = static_cast<UIFileTableItem*>(index.internalPointer());
-    UIFileTableItem *parentItem = childItem->parentItem();
-
-    if (parentItem == rootItem())
-        return QModelIndex();
-
-    return createIndex(parentItem->row(), 0, parentItem);
-}
-
-int UIGuestControlFileModel::rowCount(const QModelIndex &parent) const
-{
-    if (parent.column() > 0)
-        return 0;
-    UIFileTableItem *parentItem = 0;
-    if (!parent.isValid())
-        parentItem = rootItem();
-    else
-        parentItem = static_cast<UIFileTableItem*>(parent.internalPointer());
-    if (!parentItem)
-        return 0;
-    return parentItem->childCount();
-}
-
-void UIGuestControlFileModel::signalUpdate()
-{
-    emit layoutChanged();
-}
-
-QModelIndex UIGuestControlFileModel::rootIndex() const
-{
-    if (!rootItem())
-        return QModelIndex();
-    return createIndex(rootItem()->child(0)->row(), 0,
-                       rootItem()->child(0));
-}
-
-void UIGuestControlFileModel::beginReset()
-{
-    beginResetModel();
-}
-
-void UIGuestControlFileModel::endReset()
-{
-    endResetModel();
-}
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileModel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileModel.h	(revision 76176)
+++ 	(revision )
@@ -1,100 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIGuestControlFileModel class declaration.
- */
-
-/*
- * Copyright (C) 2016-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIGuestControlFileModel_h___
-#define ___UIGuestControlFileModel_h___
-
-/* Qt includes: */
-#include <QAbstractItemModel>
-#include <QSortFilterProxyModel>
-
-/* GUI includes: */
-#include "QITableView.h"
-
-/* Forward declarations: */
-class UIFileTableItem;
-class UIGuestControlFileTable;
-
-enum UIGuestControlFileModelColumn
-{
-    UIGuestControlFileModelColumn_Name = 0,
-    UIGuestControlFileModelColumn_Size,
-    UIGuestControlFileModelColumn_ChangeTime,
-    UIGuestControlFileModelColumn_Owner,
-    UIGuestControlFileModelColumn_Permissions,
-    UIGuestControlFileModelColumn_Max
-};
-
-/** A QSortFilterProxyModel extension used in file tables. Modifies some
- *  of the base class behavior like lessThan(..) */
-class UIGuestControlFileProxyModel : public QSortFilterProxyModel
-{
-
-    Q_OBJECT;
-
-public:
-
-    UIGuestControlFileProxyModel(QObject *parent = 0);
-
-protected:
-
-    bool lessThan(const QModelIndex &left, const QModelIndex &right) const /* override */;
-};
-
-/** UIGuestControlFileModel serves as the model for a file structure.
- *  it supports a tree level hierarchy which can be displayed with
- *  QTableView and/or QTreeView. Note the file structure data is not
- *  kept by the model but rather by the containing widget which also servers
- *  as the interface to functionality that this model provides.*/
-class UIGuestControlFileModel : public QAbstractItemModel
-{
-
-    Q_OBJECT;
-
-public:
-
-    explicit UIGuestControlFileModel(QObject *parent = 0);
-    ~UIGuestControlFileModel();
-
-    QVariant       data(const QModelIndex &index, int role) const /* override */;
-    bool           setData(const QModelIndex &index, const QVariant &value, int role);
-
-    Qt::ItemFlags  flags(const QModelIndex &index) const /* override */;
-    QVariant       headerData(int section, Qt::Orientation orientation,
-                              int role = Qt::DisplayRole) const /* override */;
-    QModelIndex    index(int row, int column,
-                      const QModelIndex &parent = QModelIndex()) const /* override */;
-    QModelIndex    index(UIFileTableItem* item);
-    QModelIndex    parent(const QModelIndex &index) const /* override */;
-    int            rowCount(const QModelIndex &parent = QModelIndex()) const /* override */;
-    int            columnCount(const QModelIndex &parent = QModelIndex()) const /* override */;
-    void           signalUpdate();
-    QModelIndex    rootIndex() const;
-    void           beginReset();
-    void           endReset();
-    static const char* strUpDirectoryString;
-
-private:
-
-    UIFileTableItem* rootItem() const;
-    void setupModelData(const QStringList &lines, UIFileTableItem *parent);
-    UIGuestControlFileTable* m_pParent;
-    UIFileTableItem *m_pRootItem;
-};
-
-
-#endif /* !___UIGuestControlFileModel_h___ */
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileTable.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileTable.cpp	(revision 76176)
+++ 	(revision )
@@ -1,1564 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIGuestControlFileTable class implementation.
- */
-
-/*
- * Copyright (C) 2016-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QAction>
-# include <QComboBox>
-# include <QCheckBox>
-# include <QDateTime>
-# include <QDir>
-# include <QHeaderView>
-# include <QItemDelegate>
-# include <QGridLayout>
-# include <QMenu>
-# include <QSortFilterProxyModel>
-# include <QTextEdit>
-# include <QPushButton>
-
-/* GUI includes: */
-# include "QIDialog.h"
-# include "QIDialogButtonBox.h"
-# include "QILabel.h"
-# include "QILineEdit.h"
-# include "QIMessageBox.h"
-# include "VBoxGlobal.h"
-# include "UIActionPool.h"
-# include "UIErrorString.h"
-# include "UIGuestFileTable.h"
-# include "UIIconPool.h"
-# include "UIGuestControlFileTable.h"
-# include "UIGuestControlFileManager.h"
-# include "UIGuestControlFileModel.h"
-# include "UIToolBar.h"
-
-/* COM includes: */
-# include "CFsObjInfo.h"
-# include "CGuestFsObjInfo.h"
-# include "CGuestDirectory.h"
-# include "CProgress.h"
-
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-
-
-/*********************************************************************************************************************************
-*   UIGuestControlFileView definition.                                                                                           *
-*********************************************************************************************************************************/
-
-/** Using QITableView causes the following problem when I click on the table items
-    Qt WARNING: Cannot creat accessible child interface for object:  UIGuestControlFileView.....
-    so for now subclass QTableView */
-class UIGuestControlFileView : public QTableView
-{
-
-    Q_OBJECT;
-
-signals:
-
-    void sigSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected);
-
-public:
-
-    UIGuestControlFileView(QWidget * parent = 0);
-    bool hasSelection() const;
-
-protected:
-
-    virtual void selectionChanged(const QItemSelection & selected, const QItemSelection & deselected) /*override */;
-
-private:
-
-    void configure();
-    QWidget *m_pParent;
-};
-
-
-/*********************************************************************************************************************************
-*   UIFileDelegate definition.                                                                                                   *
-*********************************************************************************************************************************/
-/** A QItemDelegate child class to disable dashed lines drawn around selected cells in QTableViews */
-class UIFileDelegate : public QItemDelegate
-{
-
-    Q_OBJECT;
-
-protected:
-
-    virtual void drawFocus ( QPainter * /*painter*/, const QStyleOptionViewItem & /*option*/, const QRect & /*rect*/ ) const {}
-
-};
-
-
-/*********************************************************************************************************************************
-*   UStringInputDialog definition.                                                                                          *
-*********************************************************************************************************************************/
-
-/** A QIDialog child including a line edit whose text exposed when the dialog is accepted */
-class UIStringInputDialog : public QIDialog
-{
-
-    Q_OBJECT;
-
-public:
-
-    UIStringInputDialog(QWidget *pParent = 0, Qt::WindowFlags flags = 0);
-    QString getString() const;
-
-private:
-
-    QILineEdit      *m_pLineEdit;
-
-};
-
-
-/*********************************************************************************************************************************
-*   UIFileDeleteConfirmationDialog definition.                                                                                   *
-*********************************************************************************************************************************/
-
-/** A QIDialog child including a line edit whose text exposed when the dialog is accepted */
-class UIFileDeleteConfirmationDialog : public QIDialog
-{
-
-    Q_OBJECT;
-
-public:
-
-    UIFileDeleteConfirmationDialog(QWidget *pParent = 0, Qt::WindowFlags flags = 0);
-    /** Returns whether m_pAskNextTimeCheckBox is checked or not. */
-    bool askDeleteConfirmationNextTime() const;
-
-private:
-
-    QCheckBox *m_pAskNextTimeCheckBox;
-    QILabel   *m_pQuestionLabel;
-
-};
-
-
-/*********************************************************************************************************************************
-*   UIHostDirectoryDiskUsageComputer implementation.                                                                             *
-*********************************************************************************************************************************/
-
-UIDirectoryDiskUsageComputer::UIDirectoryDiskUsageComputer(QObject *parent, QStringList pathList)
-    :QThread(parent)
-    , m_pathList(pathList)
-    , m_fOkToContinue(true)
-{
-}
-
-void UIDirectoryDiskUsageComputer::run()
-{
-    for (int i = 0; i < m_pathList.size(); ++i)
-        directoryStatisticsRecursive(m_pathList[i], m_resultStatistics);
-}
-
-void UIDirectoryDiskUsageComputer::stopRecursion()
-{
-    m_mutex.lock();
-    m_fOkToContinue = false;
-    m_mutex.unlock();
-}
-
-bool UIDirectoryDiskUsageComputer::isOkToContinue() const
-{
-    return m_fOkToContinue;
-}
-
-
-/*********************************************************************************************************************************
-*   UIPathOperations implementation.                                                                                             *
-*********************************************************************************************************************************/
-
-const QChar UIPathOperations::delimiter = QChar('/');
-const QChar UIPathOperations::dosDelimiter = QChar('\\');
-
-/* static */ QString UIPathOperations::removeMultipleDelimiters(const QString &path)
-{
-    QString newPath(path);
-    QString doubleDelimiter(2, delimiter);
-
-    while (newPath.contains(doubleDelimiter) && !newPath.isEmpty())
-        newPath = newPath.replace(doubleDelimiter, delimiter);
-    return newPath;
-}
-
-/* static */ QString UIPathOperations::removeTrailingDelimiters(const QString &path)
-{
-    if (path.isNull() || path.isEmpty())
-        return QString();
-    QString newPath(path);
-    /* Make sure for we dont have any trailing delimiters: */
-    while (newPath.length() > 1 && newPath.at(newPath.length() - 1) == UIPathOperations::delimiter)
-        newPath.chop(1);
-    return newPath;
-}
-
-/* static */ QString UIPathOperations::addTrailingDelimiters(const QString &path)
-{
-    if (path.isNull() || path.isEmpty())
-        return QString();
-    QString newPath(path);
-    while (newPath.length() > 1 && newPath.at(newPath.length() - 1) != UIPathOperations::delimiter)
-        newPath += UIPathOperations::delimiter;
-    return newPath;
-}
-
-/* static */ QString UIPathOperations::addStartDelimiter(const QString &path)
-{
-    if (path.isEmpty())
-        return QString(path);
-    QString newPath(path);
-
-    if (doesPathStartWithDriveLetter(newPath))
-    {
-        if (newPath.at(newPath.length() - 1) != delimiter)
-            newPath += delimiter;
-        return newPath;
-    }
-    if (newPath.at(0) != delimiter)
-        newPath.insert(0, delimiter);
-    return newPath;
-}
-
-/* static */ QString UIPathOperations::sanitize(const QString &path)
-{
-    //return addStartDelimiter(removeTrailingDelimiters(removeMultipleDelimiters(path)));
-    QString newPath = addStartDelimiter(removeTrailingDelimiters(removeMultipleDelimiters(path))).replace(dosDelimiter, delimiter);
-    return newPath;
-}
-
-/* static */ QString UIPathOperations::mergePaths(const QString &path, const QString &baseName)
-{
-    QString newBase(baseName);
-    newBase = newBase.remove(delimiter);
-
-    /* make sure we have one and only one trailing '/': */
-    QString newPath(sanitize(path));
-    if(newPath.isEmpty())
-        newPath = delimiter;
-    if(newPath.at(newPath.length() - 1) != delimiter)
-        newPath += UIPathOperations::delimiter;
-    newPath += newBase;
-    return sanitize(newPath);
-}
-
-/* static */ QString UIPathOperations::getObjectName(const QString &path)
-{
-    if (path.length() <= 1)
-        return QString(path);
-
-    QString strTemp(sanitize(path));
-    if (strTemp.length() < 2)
-        return strTemp;
-    int lastSlashPosition = strTemp.lastIndexOf(UIPathOperations::delimiter);
-    if (lastSlashPosition == -1)
-        return QString();
-    return strTemp.right(strTemp.length() - lastSlashPosition - 1);
-}
-
-/* static */ QString UIPathOperations::getPathExceptObjectName(const QString &path)
-{
-    if (path.length() <= 1)
-        return QString(path);
-
-    QString strTemp(sanitize(path));
-    int lastSlashPosition = strTemp.lastIndexOf(UIPathOperations::delimiter);
-    if (lastSlashPosition == -1)
-        return QString();
-    return strTemp.left(lastSlashPosition + 1);
-}
-
-/* static */ QString UIPathOperations::constructNewItemPath(const QString &previousPath, const QString &newBaseName)
-{
-    if (previousPath.length() <= 1)
-         return QString(previousPath);
-    return sanitize(mergePaths(getPathExceptObjectName(previousPath), newBaseName));
-}
-
-/* static */ QStringList UIPathOperations::pathTrail(const QString &path)
-{
-    QStringList pathList = path.split(UIPathOperations::delimiter, QString::SkipEmptyParts);
-    if (!pathList.isEmpty() && doesPathStartWithDriveLetter(pathList[0]))
-    {
-        pathList[0] = addTrailingDelimiters(pathList[0]);
-    }
-    return pathList;
-}
-
-/* static */ bool UIPathOperations::doesPathStartWithDriveLetter(const QString &path)
-{
-    if (path.length() < 2)
-        return false;
-    /* search for ':' with the path: */
-    if (!path[0].isLetter())
-        return false;
-    if (path[1] != ':')
-        return false;
-    return true;
-}
-
-
-/*********************************************************************************************************************************
-*   UIGuestControlFileView implementation.                                                                                       *
-*********************************************************************************************************************************/
-
-UIGuestControlFileView::UIGuestControlFileView(QWidget *parent)
-    :QTableView(parent)
-    , m_pParent(parent)
-{
-    configure();
-}
-
-void UIGuestControlFileView::configure()
-{
-    setContextMenuPolicy(Qt::CustomContextMenu);
-    setShowGrid(false);
-    setSelectionBehavior(QAbstractItemView::SelectRows);
-    verticalHeader()->setVisible(false);
-    setEditTriggers(QAbstractItemView::NoEditTriggers);
-    /* Minimize the row height: */
-    verticalHeader()->setDefaultSectionSize(verticalHeader()->minimumSectionSize());
-    setAlternatingRowColors(true);
-    installEventFilter(m_pParent);
-}
-
-bool UIGuestControlFileView::hasSelection() const
-{
-    QItemSelectionModel *pSelectionModel =  selectionModel();
-    if (!pSelectionModel)
-        return false;
-    return pSelectionModel->hasSelection();
-}
-
-void UIGuestControlFileView::selectionChanged(const QItemSelection & selected, const QItemSelection & deselected)
-{
-    emit sigSelectionChanged(selected, deselected);
-    QTableView::selectionChanged(selected, deselected);
-}
-
-
-/*********************************************************************************************************************************
-*   UIFileStringInputDialog implementation.                                                                                      *
-*********************************************************************************************************************************/
-
-UIStringInputDialog::UIStringInputDialog(QWidget *pParent /* = 0 */, Qt::WindowFlags flags /* = 0 */)
-    :QIDialog(pParent, flags)
-{
-    QVBoxLayout *layout = new QVBoxLayout(this);
-    m_pLineEdit = new QILineEdit(this);
-    layout->addWidget(m_pLineEdit);
-
-    QIDialogButtonBox *pButtonBox =
-        new QIDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
-    layout->addWidget(pButtonBox);
-    connect(pButtonBox, &QIDialogButtonBox::accepted, this, &UIStringInputDialog::accept);
-    connect(pButtonBox, &QIDialogButtonBox::rejected, this, &UIStringInputDialog::reject);
-}
-
-QString UIStringInputDialog::getString() const
-{
-    if (!m_pLineEdit)
-        return QString();
-    return m_pLineEdit->text();
-}
-
-
-/*********************************************************************************************************************************
-*   UIPropertiesDialog implementation.                                                                                           *
-*********************************************************************************************************************************/
-
-UIPropertiesDialog::UIPropertiesDialog(QWidget *pParent, Qt::WindowFlags flags)
-    :QIDialog(pParent, flags)
-    , m_pMainLayout(new QVBoxLayout)
-    , m_pInfoEdit(new QTextEdit)
-{
-    setLayout(m_pMainLayout);
-
-    if (m_pMainLayout)
-        m_pMainLayout->addWidget(m_pInfoEdit);
-    if (m_pInfoEdit)
-    {
-        m_pInfoEdit->setReadOnly(true);
-        m_pInfoEdit->setFrameStyle(QFrame::NoFrame);
-    }
-    QIDialogButtonBox *pButtonBox =
-        new QIDialogButtonBox(QDialogButtonBox::Ok, Qt::Horizontal, this);
-    m_pMainLayout->addWidget(pButtonBox);
-    connect(pButtonBox, &QIDialogButtonBox::accepted, this, &UIStringInputDialog::accept);
-}
-
-void UIPropertiesDialog::setPropertyText(const QString &strProperty)
-{
-    if (!m_pInfoEdit)
-        return;
-    m_strProperty = strProperty;
-    m_pInfoEdit->setHtml(strProperty);
-}
-
-void UIPropertiesDialog::addDirectoryStatistics(UIDirectoryStatistics directoryStatistics)
-{
-    if (!m_pInfoEdit)
-        return;
-    // QString propertyString = m_pInfoEdit->toHtml();
-    // propertyString += "<b>Total Size:</b> " + QString::number(directoryStatistics.m_totalSize) + QString(" bytes");
-    // if (directoryStatistics.m_totalSize >= UIGuestControlFileTable::m_iKiloByte)
-    //     propertyString += " (" + UIGuestControlFileTable::humanReadableSize(directoryStatistics.m_totalSize) + ")";
-    // propertyString += "<br/>";
-    // propertyString += "<b>File Count:</b> " + QString::number(directoryStatistics.m_uFileCount);
-
-    // m_pInfoEdit->setHtml(propertyString);
-
-    QString detailsString(m_strProperty);
-    detailsString += "<br/>";
-    detailsString += "<b>" + UIGuestControlFileManager::tr("Total Size") + "</b> " +
-        QString::number(directoryStatistics.m_totalSize) + UIGuestControlFileManager::tr(" bytes");
-    if (directoryStatistics.m_totalSize >= UIGuestControlFileTable::m_iKiloByte)
-        detailsString += " (" + UIGuestControlFileTable::humanReadableSize(directoryStatistics.m_totalSize) + ")";
-    detailsString += "<br/>";
-
-    detailsString += "<b>" + UIGuestControlFileManager::tr("File Count") + ":</b> " +
-        QString::number(directoryStatistics.m_uFileCount);
-
-    m_pInfoEdit->setHtml(detailsString);
-}
-
-
-/*********************************************************************************************************************************
-*   UIDirectoryStatistics implementation.                                                                                        *
-*********************************************************************************************************************************/
-
-UIDirectoryStatistics::UIDirectoryStatistics()
-    : m_totalSize(0)
-    , m_uFileCount(0)
-    , m_uDirectoryCount(0)
-    , m_uSymlinkCount(0)
-{
-}
-
-
-/*********************************************************************************************************************************
-*   UIFileTableItem implementation.                                                                                              *
-*********************************************************************************************************************************/
-
-UIFileTableItem::UIFileTableItem(const QVector<QVariant> &data,
-                                 UIFileTableItem *parent, FileObjectType type)
-    : m_itemData(data)
-    , m_parentItem(parent)
-    , m_bIsOpened(false)
-    , m_isTargetADirectory(false)
-    , m_type(type)
-    , m_isDriveItem(false)
-{
-}
-
-UIFileTableItem::~UIFileTableItem()
-{
-    qDeleteAll(m_childItems);
-    m_childItems.clear();
-}
-
-void UIFileTableItem::appendChild(UIFileTableItem *item)
-{
-    if (!item)
-        return;
-    m_childItems.append(item);
-    m_childMap.insert(item->name(), item);
-}
-
-UIFileTableItem *UIFileTableItem::child(int row) const
-{
-    return m_childItems.value(row);
-}
-
-UIFileTableItem *UIFileTableItem::child(const QString &path) const
-{
-    if (!m_childMap.contains(path))
-        return 0;
-    return m_childMap.value(path);
-}
-
-int UIFileTableItem::childCount() const
-{
-    return m_childItems.count();
-}
-
-int UIFileTableItem::columnCount() const
-{
-    return m_itemData.count();
-}
-
-QVariant UIFileTableItem::data(int column) const
-{
-    return m_itemData.value(column);
-}
-
-QString UIFileTableItem::name() const
-{
-    if (m_itemData.isEmpty() || !m_itemData[0].canConvert(QMetaType::QString))
-        return QString();
-    return m_itemData[0].toString();
-}
-
-void UIFileTableItem::setData(const QVariant &data, int index)
-{
-    if (index >= m_itemData.length())
-        return;
-    m_itemData[index] = data;
-}
-
-UIFileTableItem *UIFileTableItem::parentItem()
-{
-    return m_parentItem;
-}
-
-int UIFileTableItem::row() const
-{
-    if (m_parentItem)
-        return m_parentItem->m_childItems.indexOf(const_cast<UIFileTableItem*>(this));
-    return 0;
-}
-
-bool UIFileTableItem::isDirectory() const
-{
-    return m_type == FileObjectType_Directory;
-}
-
-bool UIFileTableItem::isSymLink() const
-{
-    return m_type == FileObjectType_SymLink;
-}
-
-bool UIFileTableItem::isFile() const
-{
-    return m_type == FileObjectType_File;
-}
-
-void UIFileTableItem::clearChildren()
-{
-    qDeleteAll(m_childItems);
-    m_childItems.clear();
-    m_childMap.clear();
-}
-
-bool UIFileTableItem::isOpened() const
-{
-    return m_bIsOpened;
-}
-
-void UIFileTableItem::setIsOpened(bool flag)
-{
-    m_bIsOpened = flag;
-}
-
-const QString  &UIFileTableItem::path() const
-{
-    return m_strPath;
-}
-
-void UIFileTableItem::setPath(const QString &path)
-{
-    if (path.isNull() || path.isEmpty())
-        return;
-    m_strPath = path;
-    UIPathOperations::removeTrailingDelimiters(m_strPath);
-}
-
-bool UIFileTableItem::isUpDirectory() const
-{
-    if (!isDirectory())
-        return false;
-    if (data(0) == UIGuestControlFileModel::strUpDirectoryString)
-        return true;
-    return false;
-}
-
-FileObjectType UIFileTableItem::type() const
-{
-    return m_type;
-}
-
-const QString &UIFileTableItem::targetPath() const
-{
-    return m_strTargetPath;
-}
-
-void UIFileTableItem::setTargetPath(const QString &path)
-{
-    m_strTargetPath = path;
-}
-
-bool UIFileTableItem::isSymLinkToADirectory() const
-{
-    return m_isTargetADirectory;
-}
-
-void UIFileTableItem::setIsSymLinkToADirectory(bool flag)
-{
-    m_isTargetADirectory = flag;
-}
-
-bool UIFileTableItem::isSymLinkToAFile() const
-{
-    return isSymLink() && !m_isTargetADirectory;
-}
-
-void UIFileTableItem::setIsDriveItem(bool flag)
-{
-    m_isDriveItem = flag;
-}
-
-bool UIFileTableItem::isDriveItem() const
-{
-    return m_isDriveItem;
-}
-
-/*********************************************************************************************************************************
-+*   UIFileDeleteConfirmationDialog implementation.                                                                                *
-+*********************************************************************************************************************************/
-
-UIFileDeleteConfirmationDialog::UIFileDeleteConfirmationDialog(QWidget *pParent /* = 0 */, Qt::WindowFlags flags /* = 0 */)
-    :QIDialog(pParent, flags)
-    , m_pAskNextTimeCheckBox(0)
-    , m_pQuestionLabel(0)
-{
-    QVBoxLayout *pLayout = new QVBoxLayout(this);
-
-    m_pQuestionLabel = new QILabel;
-    if (m_pQuestionLabel)
-    {
-        pLayout->addWidget(m_pQuestionLabel);
-        m_pQuestionLabel->setText(UIGuestControlFileManager::tr("Delete the selected file(s) and/or folder(s)"));
-    }
-
-    QIDialogButtonBox *pButtonBox =
-        new QIDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
-    if (pButtonBox)
-    {
-        pLayout->addWidget(pButtonBox, 0, Qt::AlignCenter);
-        connect(pButtonBox, &QIDialogButtonBox::accepted, this, &UIStringInputDialog::accept);
-        connect(pButtonBox, &QIDialogButtonBox::rejected, this, &UIStringInputDialog::reject);
-    }
-
-    m_pAskNextTimeCheckBox = new QCheckBox;
-
-    if (m_pAskNextTimeCheckBox)
-    {
-        UIGuestControlFileManagerOptions *pFileManagerOptions = UIGuestControlFileManagerOptions::instance();
-        if (pFileManagerOptions)
-            m_pAskNextTimeCheckBox->setChecked(pFileManagerOptions->bAskDeleteConfirmation);
-
-        pLayout->addWidget(m_pAskNextTimeCheckBox);
-        m_pAskNextTimeCheckBox->setText(UIGuestControlFileManager::tr("Ask for this confirmation next time"));
-        m_pAskNextTimeCheckBox->setToolTip(UIGuestControlFileManager::tr("Delete confirmation can be "
-                                                                         "disabled/enabled also from the Options panel."));
-    }
-}
-
-bool UIFileDeleteConfirmationDialog::askDeleteConfirmationNextTime() const
-{
-    if (!m_pAskNextTimeCheckBox)
-        return true;
-    return m_pAskNextTimeCheckBox->isChecked();
-}
-
-
-/*********************************************************************************************************************************
-*   UIGuestControlFileTable implementation.                                                                                      *
-*********************************************************************************************************************************/
-const unsigned UIGuestControlFileTable::m_iKiloByte = 1024; /**< Our kilo bytes are a power of two! (bird) */
-UIGuestControlFileTable::UIGuestControlFileTable(UIActionPool *pActionPool, QWidget *pParent /* = 0 */)
-    :QIWithRetranslateUI<QWidget>(pParent)
-    , m_eFileOperationType(FileOperationType_None)
-    , m_pRootItem(0)
-    , m_pLocationLabel(0)
-    , m_pPropertiesDialog(0)
-    , m_pActionPool(pActionPool)
-    , m_pToolBar(0)
-    , m_pModel(0)
-    , m_pView(0)
-    , m_pProxyModel(0)
-    , m_pMainLayout(0)
-    , m_pLocationComboBox(0)
-    , m_pWarningLabel(0)
-{
-    prepareObjects();
-}
-
-UIGuestControlFileTable::~UIGuestControlFileTable()
-{
-    delete m_pRootItem;
-}
-
-void UIGuestControlFileTable::reset()
-{
-    if (m_pModel)
-        m_pModel->beginReset();
-    delete m_pRootItem;
-    m_pRootItem = 0;
-    if (m_pModel)
-        m_pModel->endReset();
-    if (m_pLocationComboBox)
-    {
-        disconnect(m_pLocationComboBox, static_cast<void(QComboBox::*)(const QString&)>(&QComboBox::currentIndexChanged),
-                   this, &UIGuestControlFileTable::sltLocationComboCurrentChange);
-        m_pLocationComboBox->clear();
-        connect(m_pLocationComboBox, static_cast<void(QComboBox::*)(const QString&)>(&QComboBox::currentIndexChanged),
-                this, &UIGuestControlFileTable::sltLocationComboCurrentChange);
-    }
-}
-
-void UIGuestControlFileTable::emitLogOutput(const QString& strOutput, FileManagerLogType eLogType)
-{
-    emit sigLogOutput(strOutput, eLogType);
-}
-
-void UIGuestControlFileTable::prepareObjects()
-{
-    m_pMainLayout = new QGridLayout();
-    if (!m_pMainLayout)
-        return;
-    m_pMainLayout->setSpacing(0);
-    m_pMainLayout->setContentsMargins(0, 0, 0, 0);
-    setLayout(m_pMainLayout);
-
-    m_pToolBar = new UIToolBar;
-    if (m_pToolBar)
-    {
-        m_pMainLayout->addWidget(m_pToolBar, 0, 0, 1, 5);
-    }
-
-    m_pLocationLabel = new QILabel;
-    if (m_pLocationLabel)
-    {
-        m_pMainLayout->addWidget(m_pLocationLabel, 1, 0, 1, 1);
-    }
-
-    m_pLocationComboBox = new QComboBox;
-    if (m_pLocationComboBox)
-    {
-        m_pMainLayout->addWidget(m_pLocationComboBox, 1, 1, 1, 4);
-        m_pLocationComboBox->setEditable(false);
-        connect(m_pLocationComboBox, static_cast<void(QComboBox::*)(const QString&)>(&QComboBox::currentIndexChanged),
-                this, &UIGuestControlFileTable::sltLocationComboCurrentChange);
-    }
-
-
-    m_pModel = new UIGuestControlFileModel(this);
-    if (!m_pModel)
-        return;
-
-    m_pProxyModel = new UIGuestControlFileProxyModel(this);
-    if (!m_pProxyModel)
-        return;
-    m_pProxyModel->setSourceModel(m_pModel);
-
-    m_pView = new UIGuestControlFileView(this);
-    if (m_pView)
-    {
-        m_pMainLayout->addWidget(m_pView, 2, 0, 5, 5);
-
-        QHeaderView *pHorizontalHeader = m_pView->horizontalHeader();
-        if (pHorizontalHeader)
-            pHorizontalHeader->setHighlightSections(false);
-
-        m_pView->setModel(m_pProxyModel);
-        m_pView->setItemDelegate(new UIFileDelegate);
-        m_pView->setSortingEnabled(true);
-        m_pView->sortByColumn(0, Qt::AscendingOrder);
-
-        connect(m_pView, &UIGuestControlFileView::doubleClicked,
-                this, &UIGuestControlFileTable::sltItemDoubleClicked);
-        connect(m_pView, &UIGuestControlFileView::clicked,
-                this, &UIGuestControlFileTable::sltItemClicked);
-        connect(m_pView, &UIGuestControlFileView::sigSelectionChanged,
-                this, &UIGuestControlFileTable::sltSelectionChanged);
-        connect(m_pView, &UIGuestControlFileView::customContextMenuRequested,
-                this, &UIGuestControlFileTable::sltCreateFileViewContextMenu);
-
-    }
-    m_pWarningLabel = new QILabel(this);
-    if (m_pWarningLabel)
-    {
-        m_pMainLayout->addWidget(m_pWarningLabel, 2, 0, 5, 5);
-        QFont labelFont = m_pWarningLabel->font();
-        float fSizeMultiplier = 2.5;
-        if (labelFont.pointSize() != -1)
-            labelFont.setPointSize(fSizeMultiplier * labelFont.pointSize());
-        else
-            labelFont.setPixelSize(fSizeMultiplier * labelFont.pixelSize());
-        labelFont.setBold(true);
-        m_pWarningLabel->setFont(labelFont);
-        m_pWarningLabel->setAlignment(Qt::AlignCenter | Qt::AlignVCenter);
-        m_pWarningLabel->setWordWrap(true);
-    }
-    m_pWarningLabel->setVisible(!isEnabled());
-    m_pView->setVisible(isEnabled());
-
-    m_pSearchLineEdit = new QILineEdit;
-    if (m_pSearchLineEdit)
-    {
-        m_pMainLayout->addWidget(m_pSearchLineEdit, 8, 0, 1, 5);
-        m_pSearchLineEdit->hide();
-        m_pSearchLineEdit->setClearButtonEnabled(true);
-        connect(m_pSearchLineEdit, &QLineEdit::textChanged,
-                this, &UIGuestControlFileTable::sltSearchTextChanged);
-    }
-}
-
-void UIGuestControlFileTable::updateCurrentLocationEdit(const QString& strLocation)
-{
-    if (!m_pLocationComboBox)
-        return;
-    int itemIndex = m_pLocationComboBox->findText(strLocation,
-                                                  Qt::MatchExactly | Qt::MatchCaseSensitive);
-    if (itemIndex == -1)
-    {
-        m_pLocationComboBox->insertItem(m_pLocationComboBox->count(), strLocation);
-        itemIndex = m_pLocationComboBox->count() - 1;
-    }
-    m_pLocationComboBox->setCurrentIndex(itemIndex);
-}
-
-void UIGuestControlFileTable::changeLocation(const QModelIndex &index)
-{
-    if (!index.isValid() || !m_pView)
-        return;
-    m_pView->setRootIndex(m_pProxyModel->mapFromSource(index));
-    m_pView->clearSelection();
-
-    UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
-    if (item)
-    {
-        updateCurrentLocationEdit(item->path());
-    }
-    /** @todo check if we really need this and if not remove it */
-    //m_pModel->signalUpdate();
-}
-
-void UIGuestControlFileTable::initializeFileTree()
-{
-    if (m_pRootItem)
-        reset();
-
-    /* Root item: */
-    const QString startPath("/");
-    QVector<QVariant> headData;
-    headData.resize(UIGuestControlFileModelColumn_Max);
-    m_pRootItem = new UIFileTableItem(headData, 0, FileObjectType_Directory);
-    UIFileTableItem* startItem = new UIFileTableItem(createTreeItemData(startPath, 4096, QDateTime(),
-                                                                        "" /* owner */, "" /* permissions */),
-                                                     m_pRootItem, FileObjectType_Directory);
-    startItem->setPath(startPath);
-    m_pRootItem->appendChild(startItem);
-    startItem->setIsOpened(false);
-    populateStartDirectory(startItem);
-
-    m_pModel->signalUpdate();
-    updateCurrentLocationEdit(startPath);
-    m_pView->setRootIndex(m_pProxyModel->mapFromSource(m_pModel->rootIndex()));
-}
-
-void UIGuestControlFileTable::populateStartDirectory(UIFileTableItem *startItem)
-{
-    determineDriveLetters();
-    if (m_driveLetterList.isEmpty())
-    {
-        /* Read the root directory and get the list: */
-        readDirectory(startItem->path(), startItem, true);
-    }
-    else
-    {
-        for (int i = 0; i < m_driveLetterList.size(); ++i)
-        {
-            UIFileTableItem* driveItem = new UIFileTableItem(createTreeItemData(m_driveLetterList[i], 4096,
-                                                                                QDateTime(), QString(), QString()),
-                                                             startItem, FileObjectType_Directory);
-            driveItem->setPath(m_driveLetterList[i]);
-            startItem->appendChild(driveItem);
-            driveItem->setIsOpened(false);
-            driveItem->setIsDriveItem(true);
-            startItem->setIsOpened(true);
-        }
-    }
-}
-
-void UIGuestControlFileTable::insertItemsToTree(QMap<QString,UIFileTableItem*> &map,
-                                                UIFileTableItem *parent, bool isDirectoryMap, bool isStartDir)
-{
-    if (parent)
-
-    /* Make sure we have an item representing up directory, and make sure it is not there for the start dir: */
-    if (isDirectoryMap)
-    {
-        if (!map.contains(UIGuestControlFileModel::strUpDirectoryString)  && !isStartDir)
-        {
-            QVector<QVariant> data;
-            UIFileTableItem *item = new UIFileTableItem(createTreeItemData(UIGuestControlFileModel::strUpDirectoryString, 4096,
-                                                                           QDateTime(), QString(), QString())
-                                                        , parent, FileObjectType_Directory);
-            item->setIsOpened(false);
-            map.insert(UIGuestControlFileModel::strUpDirectoryString, item);
-        }
-        else if (map.contains(UIGuestControlFileModel::strUpDirectoryString)  && isStartDir)
-        {
-            map.remove(UIGuestControlFileModel::strUpDirectoryString);
-        }
-    }
-    for (QMap<QString,UIFileTableItem*>::const_iterator iterator = map.begin();
-        iterator != map.end(); ++iterator)
-    {
-        if (iterator.key() == "." || iterator.key().isEmpty())
-            continue;
-        parent->appendChild(iterator.value());
-    }
-}
-
-void UIGuestControlFileTable::sltItemDoubleClicked(const QModelIndex &index)
-{
-    if (!index.isValid() ||  !m_pModel || !m_pView)
-        return;
-    QModelIndex nIndex = m_pProxyModel ? m_pProxyModel->mapToSource(index) : index;
-    goIntoDirectory(nIndex);
-}
-
-void UIGuestControlFileTable::sltItemClicked(const QModelIndex &index)
-{
-    Q_UNUSED(index);
-    disableSelectionSearch();
-}
-
-void UIGuestControlFileTable::sltGoUp()
-{
-    if (!m_pView || !m_pModel)
-        return;
-    QModelIndex currentRoot = currentRootIndex();
-
-    if (!currentRoot.isValid())
-        return;
-    if (currentRoot != m_pModel->rootIndex())
-    {
-        QModelIndex parentIndex = currentRoot.parent();
-        if (parentIndex.isValid())
-        {
-            changeLocation(currentRoot.parent());
-            m_pView->selectRow(currentRoot.row());
-        }
-    }
-}
-
-void UIGuestControlFileTable::sltGoHome()
-{
-    goToHomeDirectory();
-}
-
-void UIGuestControlFileTable::sltRefresh()
-{
-    refresh();
-}
-
-void UIGuestControlFileTable::goIntoDirectory(const QModelIndex &itemIndex)
-{
-    if (!m_pModel)
-        return;
-
-    /* Make sure the colum is 0: */
-    QModelIndex index = m_pModel->index(itemIndex.row(), 0, itemIndex.parent());
-    if (!index.isValid())
-        return;
-
-    UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
-    if (!item)
-        return;
-
-    /* check if we need to go up: */
-    if (item->isUpDirectory())
-    {
-        QModelIndex parentIndex = m_pModel->parent(m_pModel->parent(index));
-        if (parentIndex.isValid())
-            changeLocation(parentIndex);
-        return;
-    }
-
-    if (item->isDirectory() || item->isSymLinkToADirectory())
-    {
-        if (!item->isOpened())
-            readDirectory(item->path(),item);
-        changeLocation(index);
-    }
-}
-
-void UIGuestControlFileTable::goIntoDirectory(const QStringList &pathTrail)
-{
-    UIFileTableItem *parent = getStartDirectoryItem();
-
-    for(int i = 0; i < pathTrail.size(); ++i)
-    {
-        if (!parent)
-            return;
-        /* Make sure parent is already opened: */
-        if (!parent->isOpened())
-            readDirectory(parent->path(), parent, parent == getStartDirectoryItem());
-        /* search the current path item among the parent's children: */
-        UIFileTableItem *item = parent->child(pathTrail.at(i));
-        if (!item)
-            return;
-        parent = item;
-    }
-    if (!parent)
-        return;
-    if (!parent->isOpened())
-        readDirectory(parent->path(), parent, parent == getStartDirectoryItem());
-    goIntoDirectory(parent);
-}
-
-void UIGuestControlFileTable::goIntoDirectory(UIFileTableItem *item)
-{
-    if (!item || !m_pModel)
-        return;
-    goIntoDirectory(m_pModel->index(item));
-}
-
-UIFileTableItem* UIGuestControlFileTable::indexData(const QModelIndex &index) const
-{
-    if (!index.isValid())
-        return 0;
-    return static_cast<UIFileTableItem*>(index.internalPointer());
-}
-
-void UIGuestControlFileTable::refresh()
-{
-    if (!m_pView || !m_pModel)
-        return;
-    QModelIndex currentIndex = currentRootIndex();
-
-    UIFileTableItem *treeItem = indexData(currentIndex);
-    if (!treeItem)
-        return;
-    bool isRootDir = (m_pModel->rootIndex() == currentIndex);
-    m_pModel->beginReset();
-    /* For now we clear the whole subtree (that isrecursively) which is an overkill: */
-    treeItem->clearChildren();
-    if (isRootDir)
-        populateStartDirectory(treeItem);
-    else
-        readDirectory(treeItem->path(), treeItem, isRootDir);
-    m_pModel->endReset();
-    m_pView->setRootIndex(m_pProxyModel->mapFromSource(currentIndex));
-    setSelectionDependentActionsEnabled(m_pView->hasSelection());
-}
-
-void UIGuestControlFileTable::relist()
-{
-    if (!m_pProxyModel)
-        return;
-    m_pProxyModel->invalidate();
-}
-
-void UIGuestControlFileTable::sltDelete()
-{
-    if (!checkIfDeleteOK())
-        return;
-
-    if (!m_pView || !m_pModel)
-        return;
-
-    if (!m_pView || !m_pModel)
-        return;
-    QItemSelectionModel *selectionModel =  m_pView->selectionModel();
-    if (!selectionModel)
-        return;
-
-    QModelIndexList selectedItemIndices = selectionModel->selectedRows();
-    for(int i = 0; i < selectedItemIndices.size(); ++i)
-    {
-        QModelIndex index =
-            m_pProxyModel ? m_pProxyModel->mapToSource(selectedItemIndices.at(i)) : selectedItemIndices.at(i);
-        deleteByIndex(index);
-    }
-    /** @todo dont refresh here, just delete the rows and update the table view: */
-    refresh();
-}
-
-void UIGuestControlFileTable::sltRename()
-{
-    if (!m_pView)
-        return;
-    QItemSelectionModel *selectionModel =  m_pView->selectionModel();
-    if (!selectionModel)
-        return;
-
-    QModelIndexList selectedItemIndices = selectionModel->selectedRows();
-    if (selectedItemIndices.size() == 0)
-        return;
-    QModelIndex modelIndex =
-        m_pProxyModel ? m_pProxyModel->mapToSource(selectedItemIndices.at(0)) : selectedItemIndices.at(0);
-    UIFileTableItem *item = indexData(modelIndex);
-    if (!item || item->isUpDirectory())
-        return;
-    m_pView->edit(selectedItemIndices.at(0));
-}
-
-void UIGuestControlFileTable::sltCreateNewDirectory()
-{
-    if (!m_pModel || !m_pView)
-        return;
-    QModelIndex currentIndex = currentRootIndex();
-    if (!currentIndex.isValid())
-        return;
-    UIFileTableItem *item = static_cast<UIFileTableItem*>(currentIndex.internalPointer());
-    if (!item)
-        return;
-
-    QString newDirectoryName = getNewDirectoryName();
-    if (newDirectoryName.isEmpty())
-        return;
-
-    if (createDirectory(item->path(), newDirectoryName))
-    {
-        /** @todo instead of refreshing here (an overkill) just add the
-           rows and update the tabel view: */
-        sltRefresh();
-    }
-}
-
-void UIGuestControlFileTable::sltCopy()
-{
-    m_copyCutBuffer = selectedItemPathList();
-    m_eFileOperationType = FileOperationType_Copy;
-    setPasteActionEnabled(true);
-}
-
-void UIGuestControlFileTable::sltCut()
-{
-    m_copyCutBuffer = selectedItemPathList();
-    m_eFileOperationType = FileOperationType_Cut;
-    setPasteActionEnabled(true);
-}
-
-void UIGuestControlFileTable::sltPaste()
-{
-    m_copyCutBuffer.clear();
-
-    m_eFileOperationType = FileOperationType_None;
-    setPasteActionEnabled(false);
-}
-
-void UIGuestControlFileTable::sltShowProperties()
-{
-    showProperties();
-}
-
-void UIGuestControlFileTable::sltSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected)
-{
-    Q_UNUSED(selected);
-    Q_UNUSED(deselected);
-    setSelectionDependentActionsEnabled(m_pView->hasSelection());
-}
-
-void UIGuestControlFileTable::sltLocationComboCurrentChange(const QString &strLocation)
-{
-    QString comboLocation(UIPathOperations::sanitize(strLocation));
-    if (comboLocation == currentDirectoryPath())
-        return;
-    goIntoDirectory(UIPathOperations::pathTrail(comboLocation));
-}
-
-void UIGuestControlFileTable::sltSelectAll()
-{
-    if (!m_pModel || !m_pView)
-        return;
-    m_pView->selectAll();
-    deSelectUpDirectoryItem();
-}
-
-void UIGuestControlFileTable::sltInvertSelection()
-{
-    setSelectionForAll(QItemSelectionModel::Toggle | QItemSelectionModel::Rows);
-    deSelectUpDirectoryItem();
-}
-
-void UIGuestControlFileTable::sltSearchTextChanged(const QString &strText)
-{
-    performSelectionSearch(strText);
-}
-
-void UIGuestControlFileTable::sltCreateFileViewContextMenu(const QPoint &point)
-{
-    QWidget *pSender = qobject_cast<QWidget*>(sender());
-    if (!pSender)
-        return;
-    createFileViewContextMenu(pSender, point);
-}
-
-void UIGuestControlFileTable::deSelectUpDirectoryItem()
-{
-    if (!m_pView)
-        return;
-    QItemSelectionModel *pSelectionModel = m_pView->selectionModel();
-    if (!pSelectionModel)
-        return;
-    QModelIndex currentRoot = currentRootIndex();
-    if (!currentRoot.isValid())
-        return;
-
-    /* Make sure that "up directory item" (if exists) is deselected: */
-    for (int i = 0; i < m_pModel->rowCount(currentRoot); ++i)
-    {
-        QModelIndex index = m_pModel->index(i, 0, currentRoot);
-        if (!index.isValid())
-            continue;
-
-        UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
-        if (item && item->isUpDirectory())
-        {
-            QModelIndex indexToDeselect = m_pProxyModel ? m_pProxyModel->mapFromSource(index) : index;
-            pSelectionModel->select(indexToDeselect, QItemSelectionModel::Deselect | QItemSelectionModel::Rows);
-        }
-    }
-}
-
-void UIGuestControlFileTable::setSelectionForAll(QItemSelectionModel::SelectionFlags flags)
-{
-    if (!m_pView)
-        return;
-    QItemSelectionModel *pSelectionModel = m_pView->selectionModel();
-    if (!pSelectionModel)
-        return;
-    QModelIndex currentRoot = currentRootIndex();
-    if (!currentRoot.isValid())
-        return;
-
-    for (int i = 0; i < m_pModel->rowCount(currentRoot); ++i)
-    {
-        QModelIndex index = m_pModel->index(i, 0, currentRoot);
-        if (!index.isValid())
-            continue;
-        QModelIndex indexToSelect = m_pProxyModel ? m_pProxyModel->mapFromSource(index) : index;
-        pSelectionModel->select(indexToSelect, flags);
-    }
-}
-
-void UIGuestControlFileTable::setSelection(const QModelIndex &indexInProxyModel)
-{
-    if (!m_pView)
-        return;
-    QItemSelectionModel *selectionModel =  m_pView->selectionModel();
-    if (!selectionModel)
-        return;
-    selectionModel->select(indexInProxyModel, QItemSelectionModel::Current | QItemSelectionModel::Rows | QItemSelectionModel::Select);
-    m_pView->scrollTo(indexInProxyModel, QAbstractItemView::EnsureVisible);
-}
-
-void UIGuestControlFileTable::deleteByIndex(const QModelIndex &itemIndex)
-{
-    UIFileTableItem *treeItem = indexData(itemIndex);
-    if (!treeItem)
-        return;
-    deleteByItem(treeItem);
-}
-
-void UIGuestControlFileTable::retranslateUi()
-{
-    if (m_pRootItem)
-    {
-        m_pRootItem->setData(UIGuestControlFileManager::tr("Name"), UIGuestControlFileModelColumn_Name);
-        m_pRootItem->setData(UIGuestControlFileManager::tr("Size"), UIGuestControlFileModelColumn_Size);
-        m_pRootItem->setData(UIGuestControlFileManager::tr("Change Time"), UIGuestControlFileModelColumn_ChangeTime);
-        m_pRootItem->setData(UIGuestControlFileManager::tr("Owner"), UIGuestControlFileModelColumn_Owner);
-        m_pRootItem->setData(UIGuestControlFileManager::tr("Permissions"), UIGuestControlFileModelColumn_Permissions);
-    }
-    if (m_pWarningLabel)
-        m_pWarningLabel->setText(UIGuestControlFileManager::tr("No Guest Session"));
-}
-
-bool UIGuestControlFileTable::eventFilter(QObject *pObject, QEvent *pEvent) /* override */
-{
-    Q_UNUSED(pObject);
-    if (pEvent->type() == QEvent::KeyPress)
-    {
-        QKeyEvent *pKeyEvent = dynamic_cast<QKeyEvent*>(pEvent);
-        if (pKeyEvent)
-        {
-            if (pKeyEvent->key() == Qt::Key_Enter || pKeyEvent->key() == Qt::Key_Return)
-            {
-                if (m_pView && m_pModel)
-                {
-                    /* Get the selected item. If there are 0 or more than 1 selection do nothing: */
-                    QItemSelectionModel *selectionModel =  m_pView->selectionModel();
-                    if (selectionModel)
-                    {
-                        QModelIndexList selectedItemIndices = selectionModel->selectedRows();
-                        if (selectedItemIndices.size() == 1 && m_pModel)
-                            goIntoDirectory( m_pProxyModel->mapToSource(selectedItemIndices.at(0)));
-                    }
-                }
-                return true;
-            }
-            else if (pKeyEvent->key() == Qt::Key_Delete)
-            {
-                sltDelete();
-                return true;
-            }
-            else if (pKeyEvent->key() == Qt::Key_Backspace)
-            {
-                sltGoUp();
-                return true;
-            }
-            else if (pKeyEvent->text().length() == 1 &&
-                     (pKeyEvent->text().at(0).isDigit() ||
-                      pKeyEvent->text().at(0).isLetter()))
-            {
-                if (m_pSearchLineEdit)
-                {
-                    m_pSearchLineEdit->show();
-                    QString strText = m_pSearchLineEdit->text();
-                    strText.append(pKeyEvent->text());
-                    m_pSearchLineEdit->setText(strText);
-                }
-            }
-            else if (pKeyEvent->key() == Qt::Key_Tab)
-            {
-                return true;
-            }
-        }/* if (pKeyEvent) */
-    }/* if (pEvent->type() == QEvent::KeyPress) */
-    else if (pEvent->type() == QEvent::FocusOut)
-    {
-        disableSelectionSearch();
-    }
-    /* Dont hold up the @pEvent but rather send it to the target @pObject: */
-    return false;
-}
-
-UIFileTableItem *UIGuestControlFileTable::getStartDirectoryItem()
-{
-    if (!m_pRootItem)
-        return 0;
-    if (m_pRootItem->childCount() <= 0)
-        return 0;
-    return m_pRootItem->child(0);
-}
-
-
-QString UIGuestControlFileTable::getNewDirectoryName()
-{
-    UIStringInputDialog *dialog = new UIStringInputDialog();
-    if (dialog->execute())
-    {
-        QString strDialog = dialog->getString();
-        delete dialog;
-        return strDialog;
-    }
-    delete dialog;
-    return QString();
-}
-
-QString UIGuestControlFileTable::currentDirectoryPath() const
-{
-    if (!m_pView)
-        return QString();
-    QModelIndex currentRoot = currentRootIndex();
-    if (!currentRoot.isValid())
-        return QString();
-    UIFileTableItem *item = static_cast<UIFileTableItem*>(currentRoot.internalPointer());
-    if (!item)
-        return QString();
-    /* be paranoid: */
-    if (!item->isDirectory())
-        return QString();
-    return item->path();
-}
-
-QStringList UIGuestControlFileTable::selectedItemPathList()
-{
-    QItemSelectionModel *selectionModel =  m_pView->selectionModel();
-    if (!selectionModel)
-        return QStringList();
-
-    QStringList pathList;
-    QModelIndexList selectedItemIndices = selectionModel->selectedRows();
-    for(int i = 0; i < selectedItemIndices.size(); ++i)
-    {
-        QModelIndex index =
-            m_pProxyModel ? m_pProxyModel->mapToSource(selectedItemIndices.at(i)) : selectedItemIndices.at(i);
-        UIFileTableItem *item = static_cast<UIFileTableItem*>(index.internalPointer());
-        if (!item)
-            continue;
-        pathList.push_back(item->path());
-    }
-    return pathList;
-}
-
-CGuestFsObjInfo UIGuestControlFileTable::guestFsObjectInfo(const QString& path, CGuestSession &comGuestSession) const
-{
-    if (comGuestSession.isNull())
-        return CGuestFsObjInfo();
-    CGuestFsObjInfo comFsObjInfo = comGuestSession.FsObjQueryInfo(path, true /*aFollowSymlinks*/);
-    if (!comFsObjInfo.isOk())
-        return CGuestFsObjInfo();
-    return comFsObjInfo;
-}
-
-void UIGuestControlFileTable::setSelectionDependentActionsEnabled(bool fIsEnabled)
-{
-    foreach (QAction *pAction, m_selectionDependentActions)
-    {
-        pAction->setEnabled(fIsEnabled);
-    }
-}
-
-
-QVector<QVariant> UIGuestControlFileTable::createTreeItemData(const QString &strName, ULONG64 size, const QDateTime &changeTime,
-                                                            const QString &strOwner, const QString &strPermissions)
-{
-    QVector<QVariant> data;
-    data.resize(UIGuestControlFileModelColumn_Max);
-    data[UIGuestControlFileModelColumn_Name]        = strName;
-    data[UIGuestControlFileModelColumn_Size]        = (qulonglong)size;
-    data[UIGuestControlFileModelColumn_ChangeTime]  = changeTime;
-    data[UIGuestControlFileModelColumn_Owner]       = strOwner;
-    data[UIGuestControlFileModelColumn_Permissions] = strPermissions;
-    return data;
-}
-
-bool UIGuestControlFileTable::event(QEvent *pEvent)
-{
-    if (pEvent->type() == QEvent::EnabledChange)
-    {
-        m_pWarningLabel->setVisible(!isEnabled());
-        m_pView->setVisible(isEnabled());
-        retranslateUi();
-    }
-    return QIWithRetranslateUI<QWidget>::event(pEvent);
-}
-
-QString UIGuestControlFileTable::fileTypeString(FileObjectType type)
-{
-    QString strType = UIGuestControlFileManager::tr("Unknown");
-    switch (type)
-    {
-        case FileObjectType_File:
-            strType = UIGuestControlFileManager::tr("File");
-            break;
-        case FileObjectType_Directory:
-            strType = UIGuestControlFileManager::tr("Directory");
-            break;
-        case FileObjectType_SymLink:
-            strType = UIGuestControlFileManager::tr("Symbolic Link");
-            break;
-        case FileObjectType_Other:
-            strType = UIGuestControlFileManager::tr("Other");
-            break;
-
-        case FileObjectType_Unknown:
-        default:
-            break;
-    }
-    return strType;
-}
-
-/* static */ QString UIGuestControlFileTable::humanReadableSize(ULONG64 size)
-{
-    return vboxGlobal().formatSize(size);
-}
-
-void UIGuestControlFileTable::sltReceiveDirectoryStatistics(UIDirectoryStatistics statistics)
-{
-    if (!m_pPropertiesDialog)
-        return;
-    m_pPropertiesDialog->addDirectoryStatistics(statistics);
-}
-
-QModelIndex UIGuestControlFileTable::currentRootIndex() const
-{
-    if (!m_pView)
-        return QModelIndex();
-    if (!m_pProxyModel)
-        return m_pView->rootIndex();
-    return m_pProxyModel->mapToSource(m_pView->rootIndex());
-}
-
-void UIGuestControlFileTable::performSelectionSearch(const QString &strSearchText)
-{
-    if (!m_pProxyModel | !m_pView || strSearchText.isEmpty())
-        return;
-
-    int rowCount = m_pProxyModel->rowCount(m_pView->rootIndex());
-    UIFileTableItem *pFoundItem = 0;
-    QModelIndex index;
-    for (int i = 0; i < rowCount && !pFoundItem; ++i)
-    {
-        index = m_pProxyModel->index(i, 0, m_pView->rootIndex());
-        if (!index.isValid())
-            continue;
-        pFoundItem = static_cast<UIFileTableItem*>(m_pProxyModel->mapToSource(index).internalPointer());
-        if (!pFoundItem)
-            continue;
-        const QString &strName = pFoundItem->name();
-        if (!strName.startsWith(m_pSearchLineEdit->text(), Qt::CaseInsensitive))
-            pFoundItem = 0;
-    }
-    if (pFoundItem)
-    {
-        /* Deselect anything that is already selected: */
-        m_pView->clearSelection();
-        setSelection(index);
-    }
-}
-
-void UIGuestControlFileTable::disableSelectionSearch()
-{
-    if (!m_pSearchLineEdit)
-        return;
-    m_pSearchLineEdit->blockSignals(true);
-    m_pSearchLineEdit->clear();
-    m_pSearchLineEdit->hide();
-    m_pSearchLineEdit->blockSignals(false);
-}
-
-bool UIGuestControlFileTable::checkIfDeleteOK()
-{
-    UIGuestControlFileManagerOptions *pFileManagerOptions = UIGuestControlFileManagerOptions::instance();
-    if (!pFileManagerOptions)
-        return true;
-    if (!pFileManagerOptions->bAskDeleteConfirmation)
-        return true;
-    UIFileDeleteConfirmationDialog *pDialog =
-        new UIFileDeleteConfirmationDialog(this);
-
-    bool fContinueWithDelete = (pDialog->execute() == QDialog::Accepted);
-    bool bAskNextTime = pDialog->askDeleteConfirmationNextTime();
-
-    /* Update the file manager options only if it is necessary: */
-    if (pFileManagerOptions->bAskDeleteConfirmation != bAskNextTime)
-    {
-        pFileManagerOptions->bAskDeleteConfirmation = bAskNextTime;
-        /* Notify file manager options panel so that the check box there is updated: */
-        emit sigDeleteConfirmationOptionChanged();
-    }
-
-    delete pDialog;
-
-    return fContinueWithDelete;
-
-}
-
-#include "UIGuestControlFileTable.moc"
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileTable.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestControlFileTable.h	(revision 76176)
+++ 	(revision )
@@ -1,407 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIGuestControlFileTable class declaration.
- */
-
-/*
- * Copyright (C) 2016-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIGuestControlFileTable_h___
-#define ___UIGuestControlFileTable_h___
-
-/* Qt includes: */
-#include <QItemSelectionModel>
-#include <QMutex>
-#include <QThread>
-#include <QWidget>
-
-/* COM includes: */
-#include "COMEnums.h"
-#include "CGuestSession.h"
-
-/* GUI includes: */
-#include "QIDialog.h"
-#include "QITableView.h"
-#include "QIWithRetranslateUI.h"
-#include "UIGuestControlDefs.h"
-
-/* Forward declarations: */
-class QAction;
-class QFileInfo;
-class QComboBox;
-class QILabel;
-class QILineEdit;
-class QGridLayout;
-class QSortFilterProxyModel;
-class QTextEdit;
-class QVBoxLayout;
-class UIActionPool;
-class UIFileTableItem;
-class UIGuestControlFileModel;
-class UIGuestControlFileProxyModel;
-class UIGuestControlFileView;
-class UIToolBar;
-
-/** @todo r=bird: Why don't you just use KFsObjType? */
-enum FileObjectType
-{
-    FileObjectType_File = 0,
-    FileObjectType_Directory,
-    FileObjectType_SymLink,
-    FileObjectType_Other,
-    FileObjectType_Unknown,
-    FileObjectType_Max
-};
-
-/** A simple struck to store some statictics for a directory. Mainly used by  UIDirectoryDiskUsageComputer instances. */
-class UIDirectoryStatistics
-{
-public:
-    UIDirectoryStatistics();
-    ULONG64    m_totalSize;
-    unsigned   m_uFileCount;
-    unsigned   m_uDirectoryCount;
-    unsigned   m_uSymlinkCount;
-};
-
-Q_DECLARE_METATYPE(UIDirectoryStatistics);
-
-
-/** Examines the paths in @p strStartPath and collects some staticstics from them recursively (in case directories)
- *  Runs on a worker thread to avoid GUI freezes. UIGuestFileTable and UIHostFileTable uses specialized children
- *  of this class since the calls made on file objects are different. */
-class UIDirectoryDiskUsageComputer : public QThread
-{
-    Q_OBJECT;
-
-signals:
-
-    void sigResultUpdated(UIDirectoryStatistics);
-
-public:
-
-    UIDirectoryDiskUsageComputer(QObject *parent, QStringList strStartPath);
-    /** Sets the m_fOkToContinue to false. This results an early termination
-      * of the  directoryStatisticsRecursive member function. */
-    void stopRecursion();
-
-protected:
-
-    /** Read the directory with the path @p path recursively and collect #of objects and  total size */
-    virtual void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics) = 0;
-    virtual void           run() /* override */;
-    /** Returns the m_fOkToContinue flag */
-    bool                  isOkToContinue() const;
-    /** Stores a list of paths whose statistics are accumulated, can be file, directory etc: */
-    QStringList           m_pathList;
-    UIDirectoryStatistics m_resultStatistics;
-    QMutex                m_mutex;
-
-private:
-
-    bool     m_fOkToContinue;
-};
-
-
-/** A QIDialog child to display properties of a file object */
-class UIPropertiesDialog : public QIDialog
-{
-
-    Q_OBJECT;
-
-public:
-
-    UIPropertiesDialog(QWidget *pParent = 0, Qt::WindowFlags flags = 0);
-    void setPropertyText(const QString &strProperty);
-    void addDirectoryStatistics(UIDirectoryStatistics statictics);
-
-private:
-
-    QVBoxLayout    *m_pMainLayout;
-    QTextEdit *m_pInfoEdit;
-    QString   m_strProperty;
-};
-
-/** A collection of simple utility functions to manipulate path strings */
-class UIPathOperations
-{
-public:
-    static QString removeMultipleDelimiters(const QString &path);
-    static QString removeTrailingDelimiters(const QString &path);
-    static QString addTrailingDelimiters(const QString &path);
-    static QString addStartDelimiter(const QString &path);
-
-    static QString sanitize(const QString &path);
-    /** Merges prefix and suffix by making sure they have a single '/' in between */
-    static QString mergePaths(const QString &path, const QString &baseName);
-    /** Returns the last part of the @p path. That is the filename or directory name without the path */
-    static QString getObjectName(const QString &path);
-    /** Removes the object name and return the path */
-    static QString getPathExceptObjectName(const QString &path);
-    /** Replaces the last part of the @p previusPath with newBaseName */
-    static QString constructNewItemPath(const QString &previousPath, const QString &newBaseName);
-    /** Splits the path and return it as a QStringList, top most being the 0th element. No delimiters */
-    static QStringList pathTrail(const QString &path);
-    static const QChar delimiter;
-    static const QChar dosDelimiter;
-
-    /** Tries to determine if the path starts with DOS style drive letters. */
-    static bool doesPathStartWithDriveLetter(const QString &path);
-
-};
-
-/** A UIFileTableItem instance is a tree node representing a file object (file, directory, etc). The tree contructed
-    by these instances is the data source for the UIGuestControlFileModel. */
-class UIFileTableItem
-{
-public:
-
-    /** @p data contains values to be shown in table view's colums. data[0] is assumed to be
-     *  the name of the file object which is the file name including extension or name of the
-     *  directory */
-    explicit UIFileTableItem(const QVector<QVariant> &data,
-                             UIFileTableItem *parentItem, FileObjectType type);
-    ~UIFileTableItem();
-
-    void appendChild(UIFileTableItem *child);
-
-    UIFileTableItem *child(int row) const;
-    /** Searches for the child by path and returns it if found. */
-    UIFileTableItem *child(const QString &path) const;
-    int childCount() const;
-    int columnCount() const;
-    QVariant data(int column) const;
-    void setData(const QVariant &data, int index);
-    int row() const;
-    UIFileTableItem *parentItem();
-
-    bool isDirectory() const;
-    bool isSymLink() const;
-    bool isFile() const;
-
-    bool isOpened() const;
-    void setIsOpened(bool flag);
-
-    const QString  &path() const;
-    void setPath(const QString &path);
-
-    /** Returns true if this is directory and name is ".." */
-    bool isUpDirectory() const;
-    void clearChildren();
-
-    FileObjectType   type() const;
-
-    const QString &targetPath() const;
-    void setTargetPath(const QString &path);
-
-    bool isSymLinkToADirectory() const;
-    void setIsSymLinkToADirectory(bool flag);
-
-    bool isSymLinkToAFile() const;
-
-    const QString &owner() const;
-    void setOwner(const QString &owner);
-
-    QString name() const;
-
-    void setIsDriveItem(bool flag);
-    bool isDriveItem() const;
-
-private:
-
-    QList<UIFileTableItem*>         m_childItems;
-    /** Used to find children by name */
-    QMap<QString, UIFileTableItem*> m_childMap;
-    /** It is required that m_itemData[0] is name (QString) of the file object */
-    QVector<QVariant>  m_itemData;
-    UIFileTableItem *m_parentItem;
-    bool             m_bIsOpened;
-    /** Full absolute path of the item. Without the trailing '/' */
-    QString          m_strPath;
-    /** If this is a symlink m_targetPath keeps the absolute path of the target */
-    QString          m_strTargetPath;
-    /** True if this is a symlink and the target is a directory */
-    bool             m_isTargetADirectory;
-    FileObjectType   m_type;
-    /** True if only this item represents a DOS style drive letter item */
-    bool             m_isDriveItem;
-};
-
-
-/** This class serves a base class for file table. Currently a guest version
- *  and a host version are derived from this base. Each of these children
- *  populates the UIGuestControlFileModel by scanning the file system
- *  differently. The file structre kept in this class as a tree. */
-class UIGuestControlFileTable : public QIWithRetranslateUI<QWidget>
-{
-    Q_OBJECT;
-
-signals:
-
-    void sigLogOutput(QString strLog, FileManagerLogType eLogType);
-    void sigDeleteConfirmationOptionChanged();
-
-public:
-
-    UIGuestControlFileTable(UIActionPool *pActionPool, QWidget *pParent = 0);
-    virtual ~UIGuestControlFileTable();
-    /** Deletes all the tree nodes */
-    void        reset();
-    void        emitLogOutput(const QString& strOutput, FileManagerLogType eLogType);
-    /** Returns the path of the rootIndex */
-    QString     currentDirectoryPath() const;
-    /** Returns the paths of the selected items (if any) as a list */
-    QStringList selectedItemPathList();
-    virtual void refresh();
-    void         relist();
-    static const unsigned    m_iKiloByte;
-    static QString humanReadableSize(ULONG64 size);
-
-public slots:
-
-    void sltReceiveDirectoryStatistics(UIDirectoryStatistics statictics);
-    void sltCreateNewDirectory();
-    /* index is passed by the item view and represents the double clicked object's 'proxy' model index */
-    void sltItemDoubleClicked(const QModelIndex &index);
-    void sltItemClicked(const QModelIndex &index);
-    void sltGoUp();
-    void sltGoHome();
-    void sltRefresh();
-    void sltDelete();
-    void sltRename();
-    void sltCopy();
-    void sltCut();
-    void sltPaste();
-    void sltShowProperties();
-    void sltSelectAll();
-    void sltInvertSelection();
-
-protected:
-
-    /** This enum is used when performing a gueest-to-guest or host-to-host
-     *  file operations. Paths of source file objects are kept in a single buffer
-     *  and a flag to determine if it is a cut or copy operation is needed */
-    enum FileOperationType
-    {
-        FileOperationType_Copy,
-        FileOperationType_Cut,
-        FileOperationType_None,
-        FileOperationType_Max
-    };
-
-    void retranslateUi();
-    void updateCurrentLocationEdit(const QString& strLocation);
-    /* @p index is for model not for 'proxy' model */
-    void changeLocation(const QModelIndex &index);
-    void initializeFileTree();
-    void insertItemsToTree(QMap<QString,UIFileTableItem*> &map, UIFileTableItem *parent,
-                           bool isDirectoryMap, bool isStartDir);
-    virtual void     readDirectory(const QString& strPath, UIFileTableItem *parent, bool isStartDir = false) = 0;
-    virtual void     deleteByItem(UIFileTableItem *item) = 0;
-    virtual void     deleteByPath(const QStringList &pathList) = 0;
-    virtual void     goToHomeDirectory() = 0;
-    virtual bool     renameItem(UIFileTableItem *item, QString newBaseName) = 0;
-    virtual bool     createDirectory(const QString &path, const QString &directoryName) = 0;
-    virtual QString  fsObjectPropertyString() = 0;
-    virtual void     showProperties() = 0;
-    /** For non-windows system does nothing and for windows systems populates m_driveLetterList with
-     *  drive letters */
-    virtual void     determineDriveLetters() = 0;
-    virtual void     prepareToolbar() = 0;
-    virtual void     createFileViewContextMenu(const QWidget *pWidget, const QPoint &point) = 0;
-    virtual bool     event(QEvent *pEvent) /* override */;
-
-    /** @name Copy/Cut guest-to-guest (host-to-host) stuff.
-     * @{ */
-        /** Disable/enable paste action depending on the m_eFileOperationType. */
-        virtual void  setPasteActionEnabled(bool fEnabled) = 0;
-        virtual void  pasteCutCopiedObjects() = 0;
-        /** stores the type of the pending guest-to-guest (host-to-host) file operation. */
-        FileOperationType m_eFileOperationType;
-    /** @} */
-
-    QString          fileTypeString(FileObjectType type);
-    /* @p item index is item location in model not in 'proxy' model */
-    void             goIntoDirectory(const QModelIndex &itemIndex);
-    /** Follows the path trail, opens directories as it descends */
-    void             goIntoDirectory(const QStringList &pathTrail);
-    /** Goes into directory pointed by the @p item */
-    void             goIntoDirectory(UIFileTableItem *item);
-    UIFileTableItem* indexData(const QModelIndex &index) const;
-    bool             eventFilter(QObject *pObject, QEvent *pEvent) /* override */;
-    CGuestFsObjInfo  guestFsObjectInfo(const QString& path, CGuestSession &comGuestSession) const;
-    void             setSelectionDependentActionsEnabled(bool fIsEnabled);
-    /** Creates a QList out of the parameters wrt. UIGuestControlFileModelColumn enum */
-    QVector<QVariant>  createTreeItemData(const QString &strName, ULONG64 size, const QDateTime &changeTime,
-                                        const QString &strOwner, const QString &strPermissions);
-
-    UIFileTableItem         *m_pRootItem;
-    QILabel                 *m_pLocationLabel;
-    UIPropertiesDialog      *m_pPropertiesDialog;
-    UIActionPool            *m_pActionPool;
-    UIToolBar               *m_pToolBar;
-
-    /** Stores the drive letters the file system has (for windows system). For non-windows
-     *  systems this is empty and for windows system it should at least contain C:/ */
-    QStringList              m_driveLetterList;
-    /** The set of actions which need some selection to work on. Like cut, copy etc. */
-    QSet<QAction*>           m_selectionDependentActions;
-    /** The absolue path list of the file objects which user has chosen to cut/copy. this
-     *  list will be cleaned after a paste operation or overwritten by a subsequent cut/copy.
-     *  Currently only used by the guest side. */
-    QStringList              m_copyCutBuffer;
-
-private slots:
-
-    void sltCreateFileViewContextMenu(const QPoint &point);
-    void sltSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected);
-    void sltLocationComboCurrentChange(const QString &strLocation);
-    void sltSearchTextChanged(const QString &strText);
-
-private:
-
-    void             prepareObjects();
-    /** @p itemIndex is assumed to be 'model' index not 'proxy model' index */
-    void             deleteByIndex(const QModelIndex &itemIndex);
-    /** Returns the UIFileTableItem for path / which is a direct (and single) child of m_pRootItem */
-    UIFileTableItem *getStartDirectoryItem();
-    /** Shows a modal dialog with a line edit for user to enter a new directory name and return the entered string*/
-    QString         getNewDirectoryName();
-    void            deSelectUpDirectoryItem();
-    void            setSelectionForAll(QItemSelectionModel::SelectionFlags flags);
-    void            setSelection(const QModelIndex &indexInProxyModel);
-    /** The start directory requires a special attention since on file systems with drive letters
-     *  drive letter are direct children of the start directory. On other systems start directory is '/' */
-    void            populateStartDirectory(UIFileTableItem *startItem);
-    /** Root index of the m_pModel */
-    QModelIndex     currentRootIndex() const;
-    /* Searches the content of m_pSearchLineEdit within the current items' names and selects the item if found. */
-    void            performSelectionSearch(const QString &strSearchText);
-    /** Clears the m_pSearchLineEdit and hides it. */
-    void            disableSelectionSearch();
-    /** Checks if delete confirmation dialog is shown and users choice. Returns true
-     *  if deletion can continue */
-    bool            checkIfDeleteOK();
-
-    UIGuestControlFileModel      *m_pModel;
-    UIGuestControlFileView       *m_pView;
-    UIGuestControlFileProxyModel *m_pProxyModel;
-
-    QGridLayout     *m_pMainLayout;
-    QComboBox       *m_pLocationComboBox;
-    QILineEdit      *m_pSearchLineEdit;
-    QILabel         *m_pWarningLabel;
-
-    friend class     UIGuestControlFileModel;
-};
-
-#endif /* !___UIGuestControlFileTable_h___ */
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestFileTable.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestFileTable.cpp	(revision 76176)
+++ 	(revision )
@@ -1,755 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIGuestFileTable class implementation.
- */
-
-/*
- * Copyright (C) 2016-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QDateTime>
-# include <QFileInfo>
-# include <QUuid>
-
-/* GUI includes: */
-# include "QILabel.h"
-# include "UIActionPool.h"
-# include "UIErrorString.h"
-# include "UIGuestControlFileManager.h"
-# include "UIGuestFileTable.h"
-# include "UIMessageCenter.h"
-# include "UIToolBar.h"
-
-/* COM includes: */
-# include "CFsObjInfo.h"
-# include "CGuestFsObjInfo.h"
-# include "CGuestDirectory.h"
-# include "CProgress.h"
-
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-
-/*********************************************************************************************************************************
-*   UIGuestDirectoryDiskUsageComputer definition.                                                                                *
-*********************************************************************************************************************************/
-
-/** Open directories recursively and sum the disk usage. Don't block the GUI thread while doing this */
-class UIGuestDirectoryDiskUsageComputer : public UIDirectoryDiskUsageComputer
-{
-    Q_OBJECT;
-
-public:
-
-    UIGuestDirectoryDiskUsageComputer(QObject *parent, QStringList strStartPath, const CGuestSession &session);
-
-protected:
-
-    virtual void run() /* override */;
-    virtual void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics) /* override */;
-
-private:
-
-    CGuestSession m_comGuestSession;
-};
-
-
-/*********************************************************************************************************************************
-*   UIGuestDirectoryDiskUsageComputer implementation.                                                                            *
-*********************************************************************************************************************************/
-
-UIGuestDirectoryDiskUsageComputer::UIGuestDirectoryDiskUsageComputer(QObject *parent, QStringList pathList, const CGuestSession &session)
-    :UIDirectoryDiskUsageComputer(parent, pathList)
-    , m_comGuestSession(session)
-{
-}
-
-void UIGuestDirectoryDiskUsageComputer::run()
-{
-    /* Initialize COM: */
-    COMBase::InitializeCOM(false);
-    UIDirectoryDiskUsageComputer::run();
-    /* Cleanup COM: */
-    COMBase::CleanupCOM();
-}
-
-void UIGuestDirectoryDiskUsageComputer::directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics)
-{
-    if (m_comGuestSession.isNull())
-        return;
-    /* Prevent modification of the continue flag while reading: */
-    m_mutex.lock();
-    /* Check if m_fOkToContinue is set to false. if so just end recursion: */
-    if (!isOkToContinue())
-    {
-        m_mutex.unlock();
-        return;
-    }
-    m_mutex.unlock();
-
-    CGuestFsObjInfo fileInfo = m_comGuestSession.FsObjQueryInfo(path, true);
-
-    if (!m_comGuestSession.isOk())
-        return;
-    /* if the object is a file or a symlink then read the size and return: */
-    if (fileInfo.GetType() == KFsObjType_File)
-    {
-        statistics.m_totalSize += fileInfo.GetObjectSize();
-        ++statistics.m_uFileCount;
-        sigResultUpdated(statistics);
-        return;
-    }
-    else if (fileInfo.GetType() == KFsObjType_Symlink)
-    {
-        statistics.m_totalSize += fileInfo.GetObjectSize();
-        ++statistics.m_uSymlinkCount;
-        sigResultUpdated(statistics);
-        return;
-    }
-
-    if (fileInfo.GetType() != KFsObjType_Directory)
-        return;
-    /* Open the directory to start reading its content: */
-    QVector<KDirectoryOpenFlag> flag(KDirectoryOpenFlag_None);
-    CGuestDirectory directory = m_comGuestSession.DirectoryOpen(path, /*aFilter*/ "", flag);
-    if (!m_comGuestSession.isOk())
-        return;
-
-    if (directory.isOk())
-    {
-        CFsObjInfo fsInfo = directory.Read();
-        while (fsInfo.isOk())
-        {
-            if (fsInfo.GetType() == KFsObjType_File)
-                statistics.m_uFileCount++;
-            else if (fsInfo.GetType() == KFsObjType_Symlink)
-                statistics.m_uSymlinkCount++;
-            else if(fsInfo.GetType() == KFsObjType_Directory)
-            {
-                QString dirPath = UIPathOperations::mergePaths(path, fsInfo.GetName());
-                directoryStatisticsRecursive(dirPath, statistics);
-            }
-        }
-    }
-    sigResultUpdated(statistics);
-}
-
-UIGuestFileTable::UIGuestFileTable(UIActionPool *pActionPool, QWidget *pParent /*= 0*/)
-    :UIGuestControlFileTable(pActionPool, pParent)
-{
-    prepareToolbar();
-    prepareActionConnections();
-    retranslateUi();
-}
-
-void UIGuestFileTable::initGuestFileTable(const CGuestSession &session)
-{
-    if (!session.isOk())
-        return;
-    if (session.GetStatus() != KGuestSessionStatus_Started)
-        return;
-    m_comGuestSession = session;
-    initializeFileTree();
-}
-
-void UIGuestFileTable::retranslateUi()
-{
-    if (m_pLocationLabel)
-        m_pLocationLabel->setText(UIGuestControlFileManager::tr("Guest System"));
-    UIGuestControlFileTable::retranslateUi();
-}
-
-void UIGuestFileTable::readDirectory(const QString& strPath,
-                                     UIFileTableItem *parent, bool isStartDir /*= false*/)
-
-{
-    if (!parent)
-        return;
-
-    CGuestDirectory directory;
-    QVector<KDirectoryOpenFlag> flag;
-    flag.push_back(KDirectoryOpenFlag_None);
-
-    directory = m_comGuestSession.DirectoryOpen(UIPathOperations::sanitize(strPath), /*aFilter*/ "", flag);
-    if (!m_comGuestSession.isOk())
-    {
-        emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
-        return;
-    }
-
-    parent->setIsOpened(true);
-    if (directory.isOk())
-    {
-        CFsObjInfo fsInfo = directory.Read();
-        QMap<QString, UIFileTableItem*> directories;
-        QMap<QString, UIFileTableItem*> files;
-
-        while (fsInfo.isOk())
-        {
-            QVector<QVariant> data;
-            QDateTime changeTime = QDateTime::fromMSecsSinceEpoch(fsInfo.GetChangeTime()/RT_NS_1MS);
-
-            data << fsInfo.GetName() << static_cast<qulonglong>(fsInfo.GetObjectSize())
-                 << changeTime << fsInfo.GetUserName() << permissionString(fsInfo);
-
-            FileObjectType fsObjectType = fileType(fsInfo);
-            UIFileTableItem *item = new UIFileTableItem(data, parent, fsObjectType);
-
-            if (!item)
-                continue;
-            item->setPath(UIPathOperations::mergePaths(strPath, fsInfo.GetName()));
-            if (fsObjectType == FileObjectType_Directory)
-            {
-                directories.insert(fsInfo.GetName(), item);
-                item->setIsOpened(false);
-            }
-            else if(fsObjectType == FileObjectType_File)
-            {
-                files.insert(fsInfo.GetName(), item);
-                item->setIsOpened(false);
-            }
-            else if(fsObjectType == FileObjectType_SymLink)
-            {
-                files.insert(fsInfo.GetName(), item);
-                item->setIsOpened(false);
-                /* @todo. We will need to wait a fully implemented SymlinkRead function
-                 * to be able to handle sym links properly: */
-                // QString path = UIPathOperations::mergePaths(strPath, fsInfo.GetName());
-                // QVector<KSymlinkReadFlag> aFlags;
-                // printf("%s %s %s\n", qPrintable(fsInfo.GetName()), qPrintable(path),
-                //        qPrintable(m_comGuestSession.SymlinkRead(path, aFlags)));
-            }
-
-            fsInfo = directory.Read();
-        }
-        insertItemsToTree(directories, parent, true, isStartDir);
-        insertItemsToTree(files, parent, false, isStartDir);
-    }
-    directory.Close();
-}
-
-void UIGuestFileTable::deleteByItem(UIFileTableItem *item)
-{
-    if (!item)
-        return;
-    if (item->isUpDirectory())
-        return;
-    QVector<KDirectoryRemoveRecFlag> flags(KDirectoryRemoveRecFlag_ContentAndDir);
-
-    if (item->isDirectory())
-    {
-        m_comGuestSession.DirectoryRemoveRecursive(item->path(), flags);
-    }
-    else
-        m_comGuestSession.FsObjRemove(item->path());
-    if (!m_comGuestSession.isOk())
-    {
-        emit sigLogOutput(QString(item->path()).append(" could not be deleted"), FileManagerLogType_Error);
-        emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
-    }
-}
-
-void UIGuestFileTable::deleteByPath(const QStringList &pathList)
-{
-    foreach (const QString &strPath, pathList)
-    {
-        CGuestFsObjInfo fileInfo = m_comGuestSession.FsObjQueryInfo(strPath, true);
-        FileObjectType eType = fileType(fileInfo);
-        if (eType == FileObjectType_File || eType == FileObjectType_SymLink)
-        {
-              m_comGuestSession.FsObjRemove(strPath);
-        }
-        else if (eType == FileObjectType_Directory)
-        {
-            QVector<KDirectoryRemoveRecFlag> flags(KDirectoryRemoveRecFlag_ContentAndDir);
-            m_comGuestSession.DirectoryRemoveRecursive(strPath, flags);
-        }
-
-    }
-}
-
-void UIGuestFileTable::goToHomeDirectory()
-{
-    if (m_comGuestSession.isNull())
-        return;
-    if (!m_pRootItem || m_pRootItem->childCount() <= 0)
-        return;
-    UIFileTableItem *startDirItem = m_pRootItem->child(0);
-    if (!startDirItem)
-        return;
-
-    QString userHome = UIPathOperations::sanitize(m_comGuestSession.GetUserHome());
-    if (!m_comGuestSession.isOk())
-    {
-        emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
-        return;
-    }
-    QStringList pathList = userHome.split(UIPathOperations::delimiter, QString::SkipEmptyParts);
-    goIntoDirectory(UIPathOperations::pathTrail(userHome));
-}
-
-bool UIGuestFileTable::renameItem(UIFileTableItem *item, QString newBaseName)
-{
-
-    if (!item || item->isUpDirectory() || newBaseName.isEmpty())
-        return false;
-    QString newPath = UIPathOperations::constructNewItemPath(item->path(), newBaseName);
-    QVector<KFsObjRenameFlag> aFlags(KFsObjRenameFlag_Replace);
-
-    m_comGuestSession.FsObjRename(item->path(), newPath, aFlags);
-    if (!m_comGuestSession.isOk())
-    {
-        emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
-        return false;
-    }
-
-    item->setPath(newPath);
-    return true;
-}
-
-bool UIGuestFileTable::createDirectory(const QString &path, const QString &directoryName)
-{
-    QString newDirectoryPath = UIPathOperations::mergePaths(path, directoryName);
-    QVector<KDirectoryCreateFlag> flags(KDirectoryCreateFlag_None);
-
-    m_comGuestSession.DirectoryCreate(newDirectoryPath, 0/*aMode*/, flags);
-
-    if (!m_comGuestSession.isOk())
-    {
-        emit sigLogOutput(newDirectoryPath.append(" could not be created"), FileManagerLogType_Error);
-        emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
-        return false;
-    }
-    emit sigLogOutput(newDirectoryPath.append(" has been created"), FileManagerLogType_Info);
-    return true;
-}
-
-void UIGuestFileTable::copyHostToGuest(const QStringList &hostSourcePathList,
-                                        const QString &strDestination /* = QString() */)
-{
-    if (!checkGuestSession())
-        return;
-    QVector<QString> sourcePaths = hostSourcePathList.toVector();
-    QVector<QString>  aFilters;
-    QVector<QString>  aFlags;
-    QString strDestinationPath = strDestination;
-    if (strDestinationPath.isEmpty())
-        strDestinationPath = currentDirectoryPath();
-
-    if (strDestinationPath.isEmpty())
-    {
-        emit sigLogOutput("No destination for copy operation", FileManagerLogType_Error);
-        return;
-    }
-    if (hostSourcePathList.empty())
-    {
-        emit sigLogOutput("No source for copy operation", FileManagerLogType_Error);
-        return;
-    }
-
-    CProgress progress = m_comGuestSession.CopyToGuest(sourcePaths, aFilters, aFlags, strDestinationPath);
-    if (!checkGuestSession())
-        return;
-    emit sigNewFileOperation(progress);
-}
-
-void UIGuestFileTable::copyGuestToHost(const QString& hostDestinationPath)
-{
-    if (!checkGuestSession())
-        return;
-    QVector<QString> sourcePaths = selectedItemPathList().toVector();
-    QVector<QString>  aFilters;
-    QVector<QString>  aFlags;
-
-    if (hostDestinationPath.isEmpty())
-    {
-        emit sigLogOutput("No destination for copy operation", FileManagerLogType_Error);
-        return;
-    }
-    if (sourcePaths.empty())
-    {
-        emit sigLogOutput("No source for copy operation", FileManagerLogType_Error);
-        return;
-    }
-
-    CProgress progress = m_comGuestSession.CopyFromGuest(sourcePaths, aFilters, aFlags, hostDestinationPath);
-    if (!checkGuestSession())
-        return;
-    emit sigNewFileOperation(progress);
-}
-
-FileObjectType UIGuestFileTable::fileType(const CFsObjInfo &fsInfo)
-{
-    if (fsInfo.isNull() || !fsInfo.isOk())
-        return FileObjectType_Unknown;
-    if (fsInfo.GetType() == KFsObjType_Directory)
-         return FileObjectType_Directory;
-    else if (fsInfo.GetType() == KFsObjType_File)
-        return FileObjectType_File;
-    else if (fsInfo.GetType() == KFsObjType_Symlink)
-        return FileObjectType_SymLink;
-
-    return FileObjectType_Other;
-}
-
-FileObjectType UIGuestFileTable::fileType(const CGuestFsObjInfo &fsInfo)
-{
-    if (fsInfo.isNull() || !fsInfo.isOk())
-        return FileObjectType_Unknown;
-    if (fsInfo.GetType() == KFsObjType_Directory)
-         return FileObjectType_Directory;
-    else if (fsInfo.GetType() == KFsObjType_File)
-        return FileObjectType_File;
-    else if (fsInfo.GetType() == KFsObjType_Symlink)
-        return FileObjectType_SymLink;
-
-    return FileObjectType_Other;
-}
-
-
-QString UIGuestFileTable::fsObjectPropertyString()
-{
-    QStringList selectedObjects = selectedItemPathList();
-    if (selectedObjects.isEmpty())
-        return QString();
-    if (selectedObjects.size() == 1)
-    {
-        if (selectedObjects.at(0).isNull())
-            return QString();
-
-        CGuestFsObjInfo fileInfo = m_comGuestSession.FsObjQueryInfo(selectedObjects.at(0), false /*aFollowSymlinks*/);
-        if (!m_comGuestSession.isOk())
-        {
-            emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
-            return QString();
-        }
-
-        QStringList propertyStringList;
-
-        /* Name: */
-        propertyStringList << QString("<b>Name:</b> %1<br/>").arg(UIPathOperations::getObjectName(fileInfo.GetName()));
-
-        /* Size: */
-        LONG64 size = fileInfo.GetObjectSize();
-        propertyStringList << UIGuestControlFileManager::tr("<b>Size:</b> %1 bytes").arg(QString::number(size));
-        if (size >= UIGuestControlFileTable::m_iKiloByte)
-            propertyStringList << QString(" (%1)<br/>").arg(humanReadableSize(size));
-        else
-            propertyStringList << QString("<br/>");
-
-        /* Allocated size: */
-        size = fileInfo.GetAllocatedSize();
-        propertyStringList << UIGuestControlFileManager::tr("<b>Allocated:</b> %1 bytes").arg(QString::number(size));
-        if (size >= UIGuestControlFileTable::m_iKiloByte)
-            propertyStringList << QString(" (%1)<br/>").arg(humanReadableSize(size));
-        else
-            propertyStringList << QString("<br/>");
-
-        /* Type: */
-        QString str;
-        KFsObjType const enmType = fileInfo.GetType();
-        switch (enmType)
-        {
-            case KFsObjType_Directory:  str = tr("directory"); break;
-            case KFsObjType_File:       str = tr("file"); break;
-            case KFsObjType_Symlink:    str = tr("symbolic link"); break;
-            case KFsObjType_DevChar:    str = tr("character device"); break;
-            case KFsObjType_DevBlock:   str = tr("block device"); break;
-            case KFsObjType_Fifo:       str = tr("fifo"); break;
-            case KFsObjType_Socket:     str = tr("socket"); break;
-            case KFsObjType_WhiteOut:   str = tr("whiteout"); break;
-            case KFsObjType_Unknown:    str = tr("unknown"); break;
-            default:                    str = tr("illegal-value"); break;
-        }
-        propertyStringList <<  UIGuestControlFileManager::tr("<b>Type:</b> %1<br/>").arg(str);
-
-        /* INode number, device, link count: */
-        propertyStringList << UIGuestControlFileManager::tr("<b>INode:</b> %1<br/>").arg(fileInfo.GetNodeId());
-        propertyStringList << UIGuestControlFileManager::tr("<b>Device:</b> %1<br/>").arg(fileInfo.GetNodeIdDevice());  /** @todo hex */
-        propertyStringList << UIGuestControlFileManager::tr("<b>Hardlinks:</b> %1<br/>").arg(fileInfo.GetHardLinks());
-
-        /* Attributes: */
-        str = fileInfo.GetFileAttributes();
-        if (!str.isEmpty())
-        {
-            int offSpace = str.indexOf(' ');
-            if (offSpace < 0)
-                offSpace = str.length();
-            propertyStringList << UIGuestControlFileManager::tr("<b>Mode:</b> %1<br/>").arg(str.left(offSpace));
-            propertyStringList << UIGuestControlFileManager::tr("<b>Attributes:</b> %1<br/>").arg(str.mid(offSpace + 1).trimmed());
-        }
-
-        /* Character/block device ID: */
-        ULONG uDeviceNo = fileInfo.GetDeviceNumber();
-        if (uDeviceNo != 0 || enmType == KFsObjType_DevChar || enmType == KFsObjType_DevBlock)
-            propertyStringList << UIGuestControlFileManager::tr("<b>Device ID:</b> %1<br/>").arg(uDeviceNo); /** @todo hex */
-
-        /* Owner: */
-        propertyStringList << UIGuestControlFileManager::tr("<b>Owner:</b> %1 (%2)<br/>").
-            arg(fileInfo.GetUserName()).arg(fileInfo.GetUID());
-        propertyStringList << UIGuestControlFileManager::tr("<b>Group:</b> %1 (%2)<br/>").
-            arg(fileInfo.GetGroupName()).arg(fileInfo.GetGID());
-
-        /* Timestamps: */
-        propertyStringList << UIGuestControlFileManager::tr("<b>Birth:</b> %1<br/>").
-            arg(QDateTime::fromMSecsSinceEpoch(fileInfo.GetBirthTime() / RT_NS_1MS).toString());
-        propertyStringList << UIGuestControlFileManager::tr("<b>Change:</b> %1<br/>").
-            arg(QDateTime::fromMSecsSinceEpoch(fileInfo.GetChangeTime() / RT_NS_1MS).toString());
-        propertyStringList << UIGuestControlFileManager::tr("<b>Modified:</b> %1<br/>").
-            arg(QDateTime::fromMSecsSinceEpoch(fileInfo.GetModificationTime() / RT_NS_1MS).toString());
-        propertyStringList << UIGuestControlFileManager::tr("<b>Access:</b> %1<br/>").
-            arg(QDateTime::fromMSecsSinceEpoch(fileInfo.GetAccessTime() / RT_NS_1MS).toString());
-
-        /* Join the list elements into a single string seperated by empty string: */
-        return propertyStringList.join(QString());
-    }
-
-    int fileCount = 0;
-    int directoryCount = 0;
-    ULONG64 totalSize = 0;
-
-    for(int i = 0; i < selectedObjects.size(); ++i)
-    {
-        CGuestFsObjInfo fileInfo = m_comGuestSession.FsObjQueryInfo(selectedObjects.at(0), true);
-        if (!m_comGuestSession.isOk())
-        {
-            emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
-            continue;
-        }
-
-        FileObjectType type = fileType(fileInfo);
-
-        if (type == FileObjectType_File)
-            ++fileCount;
-        if (type == FileObjectType_Directory)
-            ++directoryCount;
-        totalSize += fileInfo.GetObjectSize();
-    }
-    QStringList propertyStringList;
-    propertyStringList << UIGuestControlFileManager::tr("<b>Selected:</b> %1 files and %2 directories<br/>").
-        arg(QString::number(fileCount)).arg(QString::number(directoryCount));
-    propertyStringList << UIGuestControlFileManager::tr("<b>Size (non-recursive):</b> %1 bytes").arg(QString::number(totalSize));
-    if (totalSize >= m_iKiloByte)
-        propertyStringList << QString(" (%1)").arg(humanReadableSize(totalSize));
-
-    return propertyStringList.join(QString());;
-}
-
-void UIGuestFileTable::showProperties()
-{
-    if (m_comGuestSession.isNull())
-        return;
-    QString fsPropertyString = fsObjectPropertyString();
-    if (fsPropertyString.isEmpty())
-        return;
-
-    m_pPropertiesDialog = new UIPropertiesDialog();
-    if (!m_pPropertiesDialog)
-        return;
-
-    QStringList selectedObjects = selectedItemPathList();
-    if (selectedObjects.size() == 0)
-        return;
-    //UIGuestDirectoryDiskUsageComputer *directoryThread = 0;
-
-    /* if the selection include a directory or it is a multiple selection the create a worker thread
-       to compute total size of the selection (recusively) */
-    // bool createWorkerThread = (selectedObjects.size() > 1);
-    // if (!createWorkerThread &&
-    //     fileType(m_comGuestSession.FsObjQueryInfo(selectedObjects[0], true)) == FileObjectType_Directory)
-    //     createWorkerThread = true;
-    // if (createWorkerThread)
-    // {
-    //     directoryThread = new UIGuestDirectoryDiskUsageComputer(this, selectedObjects, m_comGuestSession);
-    //     if (directoryThread)
-    //     {
-    //         connect(directoryThread, &UIGuestDirectoryDiskUsageComputer::sigResultUpdated,
-    //                 this, &UIGuestFileTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/);
-    //         directoryThread->start();
-    //     }
-    // }
-
-    m_pPropertiesDialog->setWindowTitle(UIGuestControlFileManager::tr("Properties"));
-    m_pPropertiesDialog->setPropertyText(fsPropertyString);
-    m_pPropertiesDialog->execute();
-
-    // if (directoryThread)
-    // {
-    //     if (directoryThread->isRunning())
-    //         directoryThread->stopRecursion();
-    //     disconnect(directoryThread, &UIGuestDirectoryDiskUsageComputer::sigResultUpdated,
-    //                this, &UIGuestFileTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/);
-    // }
-
-
-    delete m_pPropertiesDialog;
-    m_pPropertiesDialog = 0;
-
-}
-
-void UIGuestFileTable::determineDriveLetters()
-{
-    if (m_comGuestSession.isNull())
-        return;
-    KPathStyle pathStyle = m_comGuestSession.GetPathStyle();
-    if (pathStyle != KPathStyle_DOS)
-        return;
-
-    /** @todo Currently API lacks a way to query windows drive letters.
-     *  so we enumarate them by using CGuestSession::DirectoryExists() */
-    m_driveLetterList.clear();
-    for (int i = 'A'; i <= 'Z'; ++i)
-    {
-        QString path((char)i);
-        path += ":/";
-        bool exists = m_comGuestSession.DirectoryExists(path, false /* aFollowSymlinks */);
-        if (exists)
-            m_driveLetterList.push_back(path);
-    }
-}
-
-void UIGuestFileTable::prepareToolbar()
-{
-    if (m_pToolBar && m_pActionPool)
-    {
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_GoUp));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_GoHome));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Refresh));
-        m_pToolBar->addSeparator();
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Delete));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Rename));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_CreateNewDirectory));
-
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Copy));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Cut));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Paste));
-        m_pToolBar->addSeparator();
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_SelectAll));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_InvertSelection));
-        m_pToolBar->addSeparator();
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_ShowProperties));
-        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Delete));
-        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Rename));
-        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Copy));
-        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Cut));
-        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_ShowProperties));
-
-        /* Hide these actions for now until we have a suitable guest-to-guest copy function: */
-        m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Copy)->setVisible(false);
-        m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Cut)->setVisible(false);
-        m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Paste)->setVisible(false);
-    }
-    setSelectionDependentActionsEnabled(false);
-    setPasteActionEnabled(false);
-}
-
-void UIGuestFileTable::createFileViewContextMenu(const QWidget *pWidget, const QPoint &point)
-{
-    if (!pWidget)
-        return;
-
-    QMenu menu;
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_GoUp));
-
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_GoHome));
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Refresh));
-    menu.addSeparator();
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Delete));
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Rename));
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_CreateNewDirectory));
-    menu.addSeparator();
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Copy));
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Cut));
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Paste));
-    menu.addSeparator();
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_SelectAll));
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_InvertSelection));
-    menu.addSeparator();
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_ShowProperties));
-    menu.exec(pWidget->mapToGlobal(point));
-}
-
-void UIGuestFileTable::setPasteActionEnabled(bool fEnabled)
-{
-    m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Paste)->setEnabled(fEnabled);
-}
-
-void UIGuestFileTable::pasteCutCopiedObjects()
-{
-    /** Wait until we have a API function that would take multiple source objects
-     *  and return a single IProgress instance: */
-    // QVector<KFileCopyFlag> fileCopyFlags;
-    // QVector<KDirectoryCopyFlag> directoryCopyFlags;
-
-    // foreach (const QString &strPath, m_copyCutBuffer)
-    // {
-
-    // }
-}
-
-
-void UIGuestFileTable::prepareActionConnections()
-{
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_GoUp), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltGoUp);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_GoHome), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltGoHome);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Refresh), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltRefresh);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Delete), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltDelete);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Rename), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltRename);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Copy), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltCopy);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Cut), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltCut);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_Paste), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltPaste);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_SelectAll), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltSelectAll);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_InvertSelection), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltInvertSelection);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_ShowProperties), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltShowProperties);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Guest_CreateNewDirectory), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltCreateNewDirectory);
-}
-
-bool UIGuestFileTable::checkGuestSession()
-{
-    if (!m_comGuestSession.isOk())
-    {
-        emit sigLogOutput(UIErrorString::formatErrorInfo(m_comGuestSession), FileManagerLogType_Error);
-        return false;
-    }
-    return true;
-}
-
-QString UIGuestFileTable::permissionString(const CFsObjInfo &fsInfo)
-{
-    /* Attributes: */
-    QString strAttributes = fsInfo.GetFileAttributes();
-
-    if (strAttributes.isEmpty())
-        return strAttributes;
-
-    int offSpace = strAttributes.indexOf(' ');
-    if (offSpace < 0)
-        offSpace = strAttributes.length();
-    return strAttributes.left(offSpace);
-}
-
-#include "UIGuestFileTable.moc"
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestFileTable.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIGuestFileTable.h	(revision 76176)
+++ 	(revision )
@@ -1,84 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIGuestFileTable class declaration.
- */
-
-/*
- * Copyright (C) 2016-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIGuestTable_h___
-#define ___UIGuestTable_h___
-
-/* Qt includes: */
-# include <QUuid>
-
-/* COM includes: */
-#include "COMEnums.h"
-#include "CGuestSession.h"
-
-/* GUI includes: */
-#include "UIGuestControlFileTable.h"
-
-/* Forward declarations: */
-class UIActionPool;
-
-/** This class scans the guest file system by using the VBox Guest Control API
- *  and populates the UIGuestControlFileModel*/
-class UIGuestFileTable : public UIGuestControlFileTable
-{
-    Q_OBJECT;
-
-public:
-
-    UIGuestFileTable(UIActionPool *pActionPool, QWidget *pParent = 0);
-    void initGuestFileTable(const CGuestSession &session);
-    void copyGuestToHost(const QString& hostDestinationPath);
-    void copyHostToGuest(const QStringList &hostSourcePathList,
-                         const QString &strDestination = QString());
-
-signals:
-
-    void sigNewFileOperation(const CProgress &comProgress);
-
-protected:
-
-    void            retranslateUi() /* override */;
-    virtual void    readDirectory(const QString& strPath, UIFileTableItem *parent, bool isStartDir = false) /* override */;
-    virtual void    deleteByItem(UIFileTableItem *item) /* override */;
-    virtual void    deleteByPath(const QStringList &pathList) /* override */;
-    virtual void    goToHomeDirectory() /* override */;
-    virtual bool    renameItem(UIFileTableItem *item, QString newBaseName);
-    virtual bool    createDirectory(const QString &path, const QString &directoryName);
-    virtual QString fsObjectPropertyString() /* override */;
-    virtual void    showProperties() /* override */;
-    virtual void    determineDriveLetters() /* override */;
-    virtual void    prepareToolbar() /* override */;
-    virtual void    createFileViewContextMenu(const QWidget *pWidget, const QPoint &point) /* override */;
-    /** @name Copy/Cut guest-to-guest stuff.
-     * @{ */
-        /** Disable/enable paste action depending on the m_eFileOperationType. */
-        virtual void  setPasteActionEnabled(bool fEnabled) /* override */;
-        virtual void  pasteCutCopiedObjects() /* override */;
-    /** @} */
-
-private:
-
-    FileObjectType  fileType(const CFsObjInfo &fsInfo);
-    FileObjectType  fileType(const CGuestFsObjInfo &fsInfo);
-
-    void prepareActionConnections();
-    bool checkGuestSession();
-    QString permissionString(const CFsObjInfo &fsInfo);
-    mutable CGuestSession     m_comGuestSession;
-};
-
-#endif /* !___UIGuestFileTable_h___ */
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIHostFileTable.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIHostFileTable.cpp	(revision 76176)
+++ 	(revision )
@@ -1,533 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIGuestControlFileTable class implementation.
- */
-
-/*
- * Copyright (C) 2016-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifdef VBOX_WITH_PRECOMPILED_HEADERS
-# include <precomp.h>
-#else  /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-/* Qt includes: */
-# include <QAction>
-# include <QDateTime>
-# include <QDir>
-
-/* GUI includes: */
-# include "QILabel.h"
-# include "UIActionPool.h"
-# include "UIGuestControlFileManager.h"
-# include "UIGuestControlFileModel.h"
-# include "UIHostFileTable.h"
-# include "UIToolBar.h"
-
-#endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-
-/*********************************************************************************************************************************
-*   UIHostDirectoryDiskUsageComputer definition.                                                                                 *
-*********************************************************************************************************************************/
-
-/** Open directories recursively and sum the disk usage. Don't block the GUI thread while doing this */
-class UIHostDirectoryDiskUsageComputer : public UIDirectoryDiskUsageComputer
-{
-    Q_OBJECT;
-
-public:
-
-    UIHostDirectoryDiskUsageComputer(QObject *parent, QStringList strStartPath);
-
-protected:
-
-    virtual void directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics) /* override */;
-};
-
-
-/*********************************************************************************************************************************
-*   UIHostDirectoryDiskUsageComputer implementation.                                                                             *
-*********************************************************************************************************************************/
-
-UIHostDirectoryDiskUsageComputer::UIHostDirectoryDiskUsageComputer(QObject *parent, QStringList pathList)
-    :UIDirectoryDiskUsageComputer(parent, pathList)
-{
-}
-
-void UIHostDirectoryDiskUsageComputer::directoryStatisticsRecursive(const QString &path, UIDirectoryStatistics &statistics)
-{
-    /* Prevent modification of the continue flag while reading: */
-    m_mutex.lock();
-    /* Check if m_fOkToContinue is set to false. if so just end recursion: */
-    if (!isOkToContinue())
-    {
-        m_mutex.unlock();
-        return;
-    }
-    m_mutex.unlock();
-
-    QFileInfo fileInfo(path);
-    if (!fileInfo.exists())
-        return;
-    /* if the object is a file or a symlink then read the size and return: */
-    if (fileInfo.isFile())
-    {
-        statistics.m_totalSize += fileInfo.size();
-        ++statistics.m_uFileCount;
-        sigResultUpdated(statistics);
-        return;
-    }
-    else if (fileInfo.isSymLink())
-    {
-        statistics.m_totalSize += fileInfo.size();
-        ++statistics.m_uSymlinkCount;
-        sigResultUpdated(statistics);
-        return;
-    }
-
-    /* if it is a directory then read the content: */
-    QDir dir(path);
-    if (!dir.exists())
-        return;
-
-    QFileInfoList entryList = dir.entryInfoList();
-    for (int i = 0; i < entryList.size(); ++i)
-    {
-        const QFileInfo &entryInfo = entryList.at(i);
-        if (entryInfo.baseName().isEmpty() || entryInfo.baseName() == "." ||
-            entryInfo.baseName() == UIGuestControlFileModel::strUpDirectoryString)
-            continue;
-        statistics.m_totalSize += entryInfo.size();
-        if (entryInfo.isSymLink())
-            statistics.m_uSymlinkCount++;
-        else if(entryInfo.isFile())
-            statistics.m_uFileCount++;
-        else if (entryInfo.isDir())
-        {
-            statistics.m_uDirectoryCount++;
-            directoryStatisticsRecursive(entryInfo.absoluteFilePath(), statistics);
-        }
-    }
-    sigResultUpdated(statistics);
-}
-
-
-/*********************************************************************************************************************************
-*   UIHostFileTable implementation.                                                                                              *
-*********************************************************************************************************************************/
-
-UIHostFileTable::UIHostFileTable(UIActionPool *pActionPool, QWidget *pParent /* = 0 */)
-    :UIGuestControlFileTable(pActionPool, pParent)
-{
-    initializeFileTree();
-    prepareToolbar();
-    prepareActionConnections();
-    retranslateUi();
-}
-
-void UIHostFileTable::retranslateUi()
-{
-    if (m_pLocationLabel)
-        m_pLocationLabel->setText(UIGuestControlFileManager::tr("Host System"));
-    UIGuestControlFileTable::retranslateUi();
-}
-
-void UIHostFileTable::prepareToolbar()
-{
-    if (m_pToolBar && m_pActionPool)
-    {
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_GoUp));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_GoHome));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Refresh));
-        m_pToolBar->addSeparator();
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Delete));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Rename));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_CreateNewDirectory));
-        /* Hide cut, copy, and paste for now. We will implement those
-           when we have an API for host file operations: */
-        // m_pToolBar->addSeparator();
-        // m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Copy));
-        // m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Cut));
-        // m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Paste));
-        m_pToolBar->addSeparator();
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_SelectAll));
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_InvertSelection));
-        m_pToolBar->addSeparator();
-        m_pToolBar->addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_ShowProperties));
-
-        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Delete));
-        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Rename));
-        m_selectionDependentActions.insert(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_ShowProperties));
-    }
-
-    setSelectionDependentActionsEnabled(false);
-}
-
-void UIHostFileTable::createFileViewContextMenu(const QWidget *pWidget, const QPoint &point)
-{
-    if (!pWidget)
-        return;
-
-    QMenu menu;
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_GoUp));
-
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_GoHome));
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Refresh));
-    menu.addSeparator();
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Delete));
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Rename));
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_CreateNewDirectory));
-    /* Hide cut, copy, and paste for now. We will implement those
-       when we have an API for host file operations: */
-    // menu.addSeparator();
-    // menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Copy));
-    // menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Cut));
-    // menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Paste));
-    menu.addSeparator();
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_SelectAll));
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_InvertSelection));
-    menu.addSeparator();
-    menu.addAction(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_ShowProperties));
-    menu.exec(pWidget->mapToGlobal(point));
-}
-
-void UIHostFileTable::readDirectory(const QString& strPath, UIFileTableItem *parent, bool isStartDir /*= false*/)
-{
-    if (!parent)
-        return;
-
-    QDir directory(strPath);
-    //directory.setFilter(QDir::NoDotAndDotDot);
-    parent->setIsOpened(true);
-    if (!directory.exists())
-        return;
-    QFileInfoList entries = directory.entryInfoList();
-    QMap<QString, UIFileTableItem*> directories;
-    QMap<QString, UIFileTableItem*> files;
-
-    for (int i = 0; i < entries.size(); ++i)
-    {
-
-        const QFileInfo &fileInfo = entries.at(i);
-        UIFileTableItem *item = new UIFileTableItem(createTreeItemData(fileInfo.fileName(), fileInfo.size(),
-                                                                       fileInfo.lastModified(), fileInfo.owner(),
-                                                                       permissionString(fileInfo.permissions())),
-                                                    parent, fileType(fileInfo));
-        if (!item)
-            continue;
-        item->setPath(fileInfo.absoluteFilePath());
-        /* if the item is a symlink set the target path and
-           check the target if it is a directory: */
-        if (fileInfo.isSymLink()) /** @todo No symlinks here on windows, while fsObjectPropertyString() does see them.  RTDirReadEx works wrt symlinks, btw. */
-        {
-            item->setTargetPath(fileInfo.symLinkTarget());
-            item->setIsSymLinkToADirectory(QFileInfo(fileInfo.symLinkTarget()).isDir());
-        }
-        if (fileInfo.isDir())
-        {
-            directories.insert(fileInfo.fileName(), item);
-            item->setIsOpened(false);
-        }
-        else
-        {
-            files.insert(fileInfo.fileName(), item);
-            item->setIsOpened(false);
-        }
-    }
-    insertItemsToTree(directories, parent, true, isStartDir);
-    insertItemsToTree(files, parent, false, isStartDir);
-    //updateCurrentLocationEdit(strPath);
-}
-
-void UIHostFileTable::deleteByItem(UIFileTableItem *item)
-{
-    if (item->isUpDirectory())
-        return;
-    if (!item->isDirectory())
-    {
-        QDir itemToDelete;
-        itemToDelete.remove(item->path());
-    }
-    QDir itemToDelete(item->path());
-    itemToDelete.setFilter(QDir::NoDotAndDotDot);
-    /* Try to delete item recursively (in case of directories).
-       note that this is no good way of deleting big directory
-       trees. We need a better error reporting and a kind of progress
-       indicator: */
-    /** @todo replace this recursive delete by a better implementation: */
-    bool deleteSuccess = itemToDelete.removeRecursively();
-
-     if (!deleteSuccess)
-         emit sigLogOutput(QString(item->path()).append(" could not be deleted"), FileManagerLogType_Error);
-}
-
-void UIHostFileTable::deleteByPath(const QStringList &pathList)
-{
-    foreach (const QString &strPath, pathList)
-    {
-        bool deleteSuccess = true;
-        FileObjectType eType = fileType(QFileInfo(strPath));
-        if (eType == FileObjectType_File || eType == FileObjectType_SymLink)
-        {
-            deleteSuccess = QDir().remove(strPath);
-        }
-        else if (eType == FileObjectType_Directory)
-        {
-            QDir itemToDelete(strPath);
-            itemToDelete.setFilter(QDir::NoDotAndDotDot);
-            deleteSuccess = itemToDelete.removeRecursively();
-        }
-        if (!deleteSuccess)
-            emit sigLogOutput(QString(strPath).append(" could not be deleted"), FileManagerLogType_Error);
-    }
-}
-
-void UIHostFileTable::goToHomeDirectory()
-{
-    if (!m_pRootItem || m_pRootItem->childCount() <= 0)
-        return;
-    UIFileTableItem *startDirItem = m_pRootItem->child(0);
-    if (!startDirItem)
-        return;
-
-    QString userHome = UIPathOperations::sanitize(QDir::homePath());
-    goIntoDirectory(UIPathOperations::pathTrail(userHome));
-}
-
-bool UIHostFileTable::renameItem(UIFileTableItem *item, QString newBaseName)
-{
-    if (!item || item->isUpDirectory() || newBaseName.isEmpty())
-        return false;
-    QString newPath = UIPathOperations::constructNewItemPath(item->path(), newBaseName);
-    QDir tempDir;
-    if (tempDir.rename(item->path(), newPath))
-    {
-        item->setPath(newPath);
-        return true;
-    }
-    return false;
-}
-
-bool UIHostFileTable::createDirectory(const QString &path, const QString &directoryName)
-{
-    QDir parentDir(path);
-    if (!parentDir.mkdir(directoryName))
-    {
-        emit sigLogOutput(UIPathOperations::mergePaths(path, directoryName).append(" could not be created"), FileManagerLogType_Error);
-        return false;
-    }
-
-    return true;
-}
-
-FileObjectType UIHostFileTable::fileType(const QFileInfo &fsInfo)
-{
-    if (!fsInfo.exists())
-        return FileObjectType_Unknown;
-    /* first check if it is symlink becacuse for Qt
-       being smylin and directory/file is not mutually exclusive: */
-    if (fsInfo.isSymLink())
-        return FileObjectType_SymLink;
-    else if (fsInfo.isFile())
-        return FileObjectType_File;
-    else if (fsInfo.isDir())
-        return FileObjectType_Directory;
-
-    return FileObjectType_Other;
-}
-
-QString UIHostFileTable::fsObjectPropertyString()
-{
-    QStringList selectedObjects = selectedItemPathList();
-    if (selectedObjects.isEmpty())
-        return QString();
-    if (selectedObjects.size() == 1)
-    {
-        if (selectedObjects.at(0).isNull())
-            return QString();
-        QFileInfo fileInfo(selectedObjects.at(0));
-        if (!fileInfo.exists())
-            return QString();
-        QStringList propertyStringList;
-        /* Name: */
-        propertyStringList << UIGuestControlFileManager::tr("<b>Name:</b> %1<br/>").arg(fileInfo.fileName());
-        /* Size: */
-        propertyStringList << UIGuestControlFileManager::tr("<b>Size:</b> %1 bytes").arg(QString::number(fileInfo.size()));
-        if (fileInfo.size() >= m_iKiloByte)
-            propertyStringList << QString(" (%1)").arg(humanReadableSize(fileInfo.size()));
-        propertyStringList << "<br/>";
-        /* Type: */
-        propertyStringList << UIGuestControlFileManager::tr("<b>Type:</b> %1<br/>").arg(fileTypeString(fileType(fileInfo)));
-        /* Creation Date: */
-        propertyStringList << UIGuestControlFileManager::tr("<b>Created:</b> %1<br/>").arg(fileInfo.created().toString());
-        /* Last Modification Date: */
-        propertyStringList << UIGuestControlFileManager::tr("<b>Modified:</b> %1<br/>").arg(fileInfo.lastModified().toString());
-        /* Owner: */
-        propertyStringList << UIGuestControlFileManager::tr("<b>Owner:</b> %1").arg(fileInfo.owner());
-
-        return propertyStringList.join(QString());;
-    }
-
-    int fileCount = 0;
-    int directoryCount = 0;
-    ULONG64 totalSize = 0;
-
-    for(int i = 0; i < selectedObjects.size(); ++i)
-    {
-        QFileInfo fileInfo(selectedObjects.at(i));
-        if (!fileInfo.exists())
-            continue;
-        if (fileInfo.isFile())
-            ++fileCount;
-        if (fileInfo.isDir())
-            ++directoryCount;
-        totalSize += fileInfo.size();
-    }
-    QStringList propertyStringList;
-    propertyStringList << UIGuestControlFileManager::tr("<b>Selected:</b> %1 files and %2 directories<br/>").
-        arg(QString::number(fileCount)).arg(QString::number(directoryCount));
-    propertyStringList << UIGuestControlFileManager::tr("<b>Size:</b> %1 bytes").arg(QString::number(totalSize));
-    if (totalSize >= m_iKiloByte)
-        propertyStringList << QString(" (%1)").arg(humanReadableSize(totalSize));
-
-    return propertyStringList.join(QString());
-}
-
-void  UIHostFileTable::showProperties()
-{
-    qRegisterMetaType<UIDirectoryStatistics>();
-    QString fsPropertyString = fsObjectPropertyString();
-    if (fsPropertyString.isEmpty())
-        return;
-    if (!m_pPropertiesDialog)
-        m_pPropertiesDialog = new UIPropertiesDialog(this);
-    if (!m_pPropertiesDialog)
-        return;
-
-    UIHostDirectoryDiskUsageComputer *directoryThread = 0;
-
-    QStringList selectedObjects = selectedItemPathList();
-    if ((selectedObjects.size() == 1 && QFileInfo(selectedObjects.at(0)).isDir())
-        || selectedObjects.size() > 1)
-    {
-        directoryThread = new UIHostDirectoryDiskUsageComputer(this, selectedObjects);
-        if (directoryThread)
-        {
-            connect(directoryThread, &UIHostDirectoryDiskUsageComputer::sigResultUpdated,
-                    this, &UIHostFileTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/);
-            directoryThread->start();
-        }
-    }
-    m_pPropertiesDialog->setWindowTitle("Properties");
-    m_pPropertiesDialog->setPropertyText(fsPropertyString);
-    m_pPropertiesDialog->execute();
-    if (directoryThread)
-    {
-        if (directoryThread->isRunning())
-            directoryThread->stopRecursion();
-        disconnect(directoryThread, &UIHostDirectoryDiskUsageComputer::sigResultUpdated,
-                this, &UIHostFileTable::sltReceiveDirectoryStatistics/*, Qt::DirectConnection*/);
-        directoryThread->wait();
-    }
-}
-
-void UIHostFileTable::determineDriveLetters()
-{
-    QFileInfoList drive = QDir::drives();
-    m_driveLetterList.clear();
-    for (int i = 0; i < drive.size(); ++i)
-    {
-        if (UIPathOperations::doesPathStartWithDriveLetter(drive[i].filePath()))
-            m_driveLetterList.push_back(drive[i].filePath());
-
-    }
-}
-
-QString UIHostFileTable::permissionString(QFileDevice::Permissions permissions)
-{
-    QString strPermissions;
-    if (permissions & QFileDevice::ReadOwner)
-        strPermissions += 'r';
-    else
-        strPermissions += '-';
-
-    if (permissions & QFileDevice::WriteOwner)
-        strPermissions += 'w';
-    else
-        strPermissions += '-';
-
-    if (permissions & QFileDevice::ExeOwner)
-        strPermissions += 'x';
-    else
-        strPermissions += '-';
-
-    if (permissions & QFileDevice::ReadGroup)
-        strPermissions += 'r';
-    else
-        strPermissions += '-';
-
-    if (permissions & QFileDevice::WriteGroup)
-        strPermissions += 'w';
-    else
-        strPermissions += '-';
-
-    if (permissions & QFileDevice::ExeGroup)
-        strPermissions += 'x';
-    else
-        strPermissions += '-';
-
-    if (permissions & QFileDevice::ReadOther)
-        strPermissions += 'r';
-    else
-        strPermissions += '-';
-
-    if (permissions & QFileDevice::WriteOther)
-        strPermissions += 'w';
-    else
-        strPermissions += '-';
-
-    if (permissions & QFileDevice::ExeOther)
-        strPermissions += 'x';
-    else
-        strPermissions += '-';
-    return strPermissions;
-}
-
-void UIHostFileTable::prepareActionConnections()
-{
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_GoUp), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltGoUp);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_GoHome), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltGoHome);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Refresh), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltRefresh);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Delete), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltDelete);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Rename), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltRename);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Copy), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltCopy);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Cut), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltCut);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_Paste), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltPaste);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_SelectAll), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltSelectAll);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_InvertSelection), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltInvertSelection);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_ShowProperties), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltShowProperties);
-    connect(m_pActionPool->action(UIActionIndex_M_GuestControlFileManager_S_Host_CreateNewDirectory), &QAction::triggered,
-            this, &UIGuestControlFileTable::sltCreateNewDirectory);
-}
-
-#include "UIHostFileTable.moc"
Index: unk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIHostFileTable.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/guestctrl/UIHostFileTable.h	(revision 76176)
+++ 	(revision )
@@ -1,66 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIHostFileTable class declaration.
- */
-
-/*
- * Copyright (C) 2016-2018 Oracle Corporation
- *
- * This file is part of VirtualBox Open Source Edition (OSE), as
- * available from http://www.virtualbox.org. This file is free software;
- * you can redistribute it and/or modify it under the terms of the GNU
- * General Public License (GPL) as published by the Free Software
- * Foundation, in version 2 as it comes in the "COPYING" file of the
- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
- */
-
-#ifndef ___UIHostFileTable_h___
-#define ___UIHostFileTable_h___
-
-/* GUI includes: */
-#include "UIGuestControlFileTable.h"
-
-/* Forward declarations: */
-class UIActionPool;
-
-/** This class scans the host file system by using the Qt API
-    and connects to the UIGuestControlFileModel*/
-class UIHostFileTable : public UIGuestControlFileTable
-{
-    Q_OBJECT;
-
-public:
-
-    UIHostFileTable(UIActionPool *pActionPool, QWidget *pParent = 0);
-
-protected:
-
-    FileObjectType  fileType(const QFileInfo &fsInfo);
-    void            retranslateUi() /* override */;
-    virtual void    readDirectory(const QString& strPath, UIFileTableItem *parent, bool isStartDir = false) /* override */;
-    virtual void    deleteByItem(UIFileTableItem *item) /* override */;
-    virtual void    deleteByPath(const QStringList &pathList) /* override */;
-    virtual void    goToHomeDirectory() /* override */;
-    virtual bool    renameItem(UIFileTableItem *item, QString newBaseName);
-    virtual bool    createDirectory(const QString &path, const QString &directoryName);
-    virtual QString fsObjectPropertyString() /* override */;
-    virtual void    showProperties() /* override */;
-    virtual void    determineDriveLetters() /* override */;
-    virtual void    prepareToolbar() /* override */;
-    virtual void    createFileViewContextMenu(const QWidget *pWidget, const QPoint &point) /* override */;
-    /** @name Copy/Cut host-to-host stuff. Currently not implemented.
-     * @{ */
-        /** Disable/enable paste action depending on the m_eFileOperationType. */
-        virtual void  setPasteActionEnabled(bool) /* override */{}
-        virtual void  pasteCutCopiedObjects() /* override */{}
-    /** @} */
-
-private:
-
-    QString permissionString(QFileDevice::Permissions permissions);
-    void    prepareActionConnections();
-
-};
-
-#endif /* !___UIHostFileTable_h___ */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 76176)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 76177)
@@ -66,5 +66,5 @@
 # include "UIAddDiskEncryptionPasswordDialog.h"
 # include "UIVMInformationDialog.h"
-# include "UIGuestControlFileManagerDialog.h"
+# include "UIFileManagerDialog.h"
 # include "UIGuestProcessControlDialog.h"
 
@@ -1109,6 +1109,6 @@
     connect(actionPool()->action(UIActionIndexRT_M_Machine_S_ShowInformation), SIGNAL(triggered()),
             this, SLOT(sltShowInformationDialog()));
-    connect(actionPool()->action(UIActionIndexRT_M_Machine_S_ShowGuestControlFileManager), SIGNAL(triggered()),
-            this, SLOT(sltShowGuestControlFileManagerDialog()));
+    connect(actionPool()->action(UIActionIndexRT_M_Machine_S_ShowFileManager), SIGNAL(triggered()),
+            this, SLOT(sltShowFileManagerDialog()));
     connect(actionPool()->action(UIActionIndexRT_M_Machine_S_ShowGuestProcessControl), SIGNAL(triggered()),
             this, SLOT(sltShowGuestProcessControlDialog()));
@@ -1782,5 +1782,5 @@
 }
 
-void UIMachineLogic::sltShowGuestControlFileManagerDialog()
+void UIMachineLogic::sltShowFileManagerDialog()
 {
     if (machine().isNull() || !activeMachineWindow())
@@ -1792,5 +1792,5 @@
 
     QIManagerDialog *pFileManagerDialog;
-    UIGuestControlFileManagerDialogFactory dialogFactory(actionPool(), console().GetGuest(), machine().GetName());
+    UIFileManagerDialogFactory dialogFactory(actionPool(), console().GetGuest(), machine().GetName());
     dialogFactory.prepare(pFileManagerDialog, activeMachineWindow());
     if (pFileManagerDialog)
@@ -1803,9 +1803,9 @@
         pFileManagerDialog->activateWindow();
         connect(pFileManagerDialog, &QIManagerDialog::sigClose,
-                this, &UIMachineLogic::sltCloseGuestControlFileManagerDialog);
-    }
-}
-
-void UIMachineLogic::sltCloseGuestControlFileManagerDialog()
+                this, &UIMachineLogic::sltCloseFileManagerDialog);
+    }
+}
+
+void UIMachineLogic::sltCloseFileManagerDialog()
 {
     QIManagerDialog* pDialog = qobject_cast<QIManagerDialog*>(sender());
@@ -1816,5 +1816,5 @@
     m_pFileManagerDialog = 0;
     pDialog->close();
-    UIGuestControlFileManagerDialogFactory().cleanup(pDialog);
+    UIFileManagerDialogFactory().cleanup(pDialog);
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h	(revision 76176)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h	(revision 76177)
@@ -274,6 +274,6 @@
     void sltTakeSnapshot();
     void sltShowInformationDialog();
-    void sltShowGuestControlFileManagerDialog();
-    void sltCloseGuestControlFileManagerDialog();
+    void sltShowFileManagerDialog();
+    void sltCloseFileManagerDialog();
     void sltShowGuestProcessControlDialog();
     void sltCloseGuestProcessControlDialog();
