#ifndef MAIN_WINDOW_H
#define MAIN_WINDOW_H
#include <DiskDeviceRoster.h>
#include <FilePanel.h>
#include <Notification.h>
#include <PopUpMenu.h>
#include <Window.h>
#include "Support.h"
class BColumnListView;
class BDiskDevice;
class BMenu;
class BMenuBar;
class BMenuItem;
class BPartition;
class BRow;
class DiskView;
class PartitionListView;
enum {
MSG_SELECTED_PARTITION_ID = 'spid',
MSG_UPDATE_ZOOM_LIMITS = 'uzls'
};
class MainWindow : public BWindow {
public:
MainWindow();
virtual ~MainWindow();
virtual bool QuitRequested();
virtual void MessageReceived(BMessage* message);
status_t StoreSettings(BMessage* archive) const;
status_t RestoreSettings(BMessage* archive);
void ApplyDefaultSettings();
status_t RegisterFileDiskDevice(const char* fileName);
status_t UnRegisterFileDiskDevice(const char* fileName);
static int32 SaveDiskImage(void* data);
static int32 WriteDiskImage(void* data);
private:
static void _WriteDiskImage(BMessenger messenger,
BFile source, BFile target,
const char* targetpath,
BString title, BString status);
void _ScanDrives();
void _AdaptToSelectedPartition();
void _SetToDiskAndPartition(partition_id diskID,
partition_id partitionID,
partition_id parentID);
void _UpdateMenus(BDiskDevice* disk,
partition_id selectedPartition,
partition_id parentID);
void _DisplayPartitionError(BString message,
const BPartition* partition = NULL,
status_t error = B_OK) const;
void _Mount(BDiskDevice* disk,
partition_id selectedPartition);
void _Unmount(BDiskDevice* disk,
partition_id selectedPartition);
void _MountAll();
void _Initialize(BDiskDevice* disk,
partition_id selectedPartition,
const BString& diskSystemName);
void _Create(BDiskDevice* disk,
partition_id selectedPartition);
void _Delete(BDiskDevice* disk,
partition_id selectedPartition);
void _ChangeParameters(BDiskDevice* disk,
partition_id selectedPartition);
float _ColumnListViewHeight(BColumnListView* list,
BRow* currentRow);
void _UpdateWindowZoomLimits();
private:
BDiskDeviceRoster fDiskDeviceRoster;
BDiskDevice* fCurrentDisk;
partition_id fCurrentPartitionID;
PartitionListView* fListView;
DiskView* fDiskView;
SpaceIDMap fSpaceIDMap;
BMenu* fDiskMenu;
BMenu* fDiskInitMenu;
BMenu* fPartitionMenu;
BMenu* fFormatMenu;
BMenu* fDiskImageMenu;
BMenuBar* fMenuBar;
BMenuItem* fWipeMenuItem;
BMenuItem* fEjectMenuItem;
BMenuItem* fSurfaceTestMenuItem;
BMenuItem* fRescanMenuItem;
BMenuItem* fCreateMenuItem;
BMenuItem* fChangeMenuItem;
BMenuItem* fDeleteMenuItem;
BMenuItem* fMountMenuItem;
BMenuItem* fUnmountMenuItem;
BMenuItem* fMountAllMenuItem;
BMenuItem* fOpenDiskProbeMenuItem;
BMenu* fFormatContextMenuItem;
BMenuItem* fCreateContextMenuItem;
BMenuItem* fChangeContextMenuItem;
BMenuItem* fDeleteContextMenuItem;
BMenuItem* fMountContextMenuItem;
BMenuItem* fUnmountContextMenuItem;
BMenuItem* fOpenDiskProbeContextMenuItem;
BPopUpMenu* fContextMenu;
BMenuItem* fRegisterMenuItem;
BMenuItem* fUnRegisterMenuItem;
BMenuItem* fSaveMenuItem;
BMenuItem* fWriteMenuItem;
BFilePanel* fRegisterFilePanel;
BFilePanel* fWriteImageFilePanel;
BFilePanel* fReadImageFilePanel;
BNotification* fNotification;
};
#endif