now populates menus
improved size to string formating for GB and TB git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14531 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -10,6 +10,8 @@
|
|||||||
#include <DiskDeviceTypes.h>
|
#include <DiskDeviceTypes.h>
|
||||||
#include <Path.h>
|
#include <Path.h>
|
||||||
|
|
||||||
|
extern void SizeAsString(int32 size, char *string);
|
||||||
|
|
||||||
class SourceVisitor : public BDiskDeviceVisitor
|
class SourceVisitor : public BDiskDeviceVisitor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -28,6 +30,7 @@ public:
|
|||||||
virtual bool Visit(BDiskDevice *device);
|
virtual bool Visit(BDiskDevice *device);
|
||||||
virtual bool Visit(BPartition *partition, int32 level);
|
virtual bool Visit(BPartition *partition, int32 level);
|
||||||
private:
|
private:
|
||||||
|
void MakeLabel(BPartition *partition, char *label, char *menuLabel);
|
||||||
BMenu *fMenu;
|
BMenu *fMenu;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -103,8 +106,9 @@ SourceVisitor::Visit(BDiskDevice *device)
|
|||||||
return false;
|
return false;
|
||||||
BPath path;
|
BPath path;
|
||||||
if (device->GetPath(&path)==B_OK)
|
if (device->GetPath(&path)==B_OK)
|
||||||
printf("SourceVisitor::Visit(BDiskDevice *) : %s type:%s, contentType:%s\n", path.Path(), device->Type(), device->ContentType());
|
printf("SourceVisitor::Visit(BDiskDevice *) : %s type:%s, contentType:%s\n",
|
||||||
fMenu->AddItem(new PartitionMenuItem(device->Name(), new BMessage(SRC_PARTITION), device->ID()));
|
path.Path(), device->Type(), device->ContentType());
|
||||||
|
fMenu->AddItem(new PartitionMenuItem(NULL, device->ContentName(), NULL, new BMessage(SRC_PARTITION), device->ID()));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,7 +122,7 @@ SourceVisitor::Visit(BPartition *partition, int32 level)
|
|||||||
if (partition->GetPath(&path)==B_OK)
|
if (partition->GetPath(&path)==B_OK)
|
||||||
printf("SourceVisitor::Visit(BPartition *) : %s\n", path.Path());
|
printf("SourceVisitor::Visit(BPartition *) : %s\n", path.Path());
|
||||||
printf("SourceVisitor::Visit(BPartition *) : %s\n", partition->Name());
|
printf("SourceVisitor::Visit(BPartition *) : %s\n", partition->Name());
|
||||||
fMenu->AddItem(new PartitionMenuItem(partition->Name(), new BMessage(SRC_PARTITION), partition->ID()));
|
fMenu->AddItem(new PartitionMenuItem(NULL, partition->ContentName(), NULL, new BMessage(SRC_PARTITION), partition->ID()));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,7 +141,9 @@ TargetVisitor::Visit(BDiskDevice *device)
|
|||||||
BPath path;
|
BPath path;
|
||||||
if (device->GetPath(&path)==B_OK)
|
if (device->GetPath(&path)==B_OK)
|
||||||
printf("TargetVisitor::Visit(BDiskDevice *) : %s\n", path.Path());
|
printf("TargetVisitor::Visit(BDiskDevice *) : %s\n", path.Path());
|
||||||
fMenu->AddItem(new PartitionMenuItem(device->Name(), new BMessage(TARGET_PARTITION), device->ID()));
|
char label[255], menuLabel[255];
|
||||||
|
MakeLabel(device, label, menuLabel);
|
||||||
|
fMenu->AddItem(new PartitionMenuItem(device->ContentName(), label, menuLabel, new BMessage(TARGET_PARTITION), device->ID()));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,6 +157,25 @@ TargetVisitor::Visit(BPartition *partition, int32 level)
|
|||||||
if (partition->GetPath(&path)==B_OK)
|
if (partition->GetPath(&path)==B_OK)
|
||||||
printf("TargetVisitor::Visit(BPartition *) : %s\n", path.Path());
|
printf("TargetVisitor::Visit(BPartition *) : %s\n", path.Path());
|
||||||
printf("TargetVisitor::Visit(BPartition *) : %s\n", partition->Name());
|
printf("TargetVisitor::Visit(BPartition *) : %s\n", partition->Name());
|
||||||
fMenu->AddItem(new PartitionMenuItem(partition->Name(), new BMessage(TARGET_PARTITION), partition->ID()));
|
char label[255], menuLabel[255];
|
||||||
|
MakeLabel(partition, label, menuLabel);
|
||||||
|
fMenu->AddItem(new PartitionMenuItem(partition->ContentName(), label, menuLabel, new BMessage(TARGET_PARTITION), partition->ID()));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TargetVisitor::MakeLabel(BPartition *partition, char *label, char *menuLabel)
|
||||||
|
{
|
||||||
|
char size[15];
|
||||||
|
SizeAsString(partition->ContentSize(), size);
|
||||||
|
BPath path;
|
||||||
|
if (partition->Parent())
|
||||||
|
partition->Parent()->GetPath(&path);
|
||||||
|
|
||||||
|
sprintf(label, "%s - %s [%s] [%s partition:%li]", partition->ContentName(), size, partition->ContentType(),
|
||||||
|
path.Path(), partition->ID());
|
||||||
|
sprintf(menuLabel, "%s - %s [%s]", partition->ContentName(), size, partition->ContentType());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
void LaunchInitScript(BVolume *volume);
|
void LaunchInitScript(BVolume *volume);
|
||||||
void LaunchFinishScript(BVolume *volume);
|
void LaunchFinishScript(BVolume *volume);
|
||||||
|
|
||||||
InstallerWindow *fWindow;
|
InstallerWindow *fWindow;
|
||||||
BDiskDeviceRoster fDDRoster;
|
BDiskDeviceRoster fDDRoster;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -113,8 +113,8 @@ InstallerWindow::InstallerWindow(BRect frame_rect)
|
|||||||
"options_button", "Fewer options", "More options", new BMessage(SHOW_BOTTOM_MESSAGE));
|
"options_button", "Fewer options", "More options", new BMessage(SHOW_BOTTOM_MESSAGE));
|
||||||
fBackBox->AddChild(fDrawButton);
|
fBackBox->AddChild(fDrawButton);
|
||||||
|
|
||||||
fDestMenu = new BPopUpMenu("scanning" B_UTF8_ELLIPSIS);
|
fDestMenu = new BPopUpMenu("scanning" B_UTF8_ELLIPSIS, true, false);
|
||||||
fSrcMenu = new BPopUpMenu("scanning" B_UTF8_ELLIPSIS);
|
fSrcMenu = new BPopUpMenu("scanning" B_UTF8_ELLIPSIS, true, false);
|
||||||
|
|
||||||
BRect fieldRect(bounds.left+50, bounds.top+70, bounds.right-13, bounds.top+90);
|
BRect fieldRect(bounds.left+50, bounds.top+70, bounds.right-13, bounds.top+90);
|
||||||
fSrcMenuField = new BMenuField(fieldRect, "srcMenuField",
|
fSrcMenuField = new BMenuField(fieldRect, "srcMenuField",
|
||||||
@@ -170,6 +170,10 @@ InstallerWindow::MessageReceived(BMessage *msg)
|
|||||||
break;
|
break;
|
||||||
case SRC_PARTITION:
|
case SRC_PARTITION:
|
||||||
PublishPackages();
|
PublishPackages();
|
||||||
|
AdjustMenus();
|
||||||
|
break;
|
||||||
|
case TARGET_PARTITION:
|
||||||
|
AdjustMenus();
|
||||||
break;
|
break;
|
||||||
case SETUP_MESSAGE:
|
case SETUP_MESSAGE:
|
||||||
LaunchDriveSetup();
|
LaunchDriveSetup();
|
||||||
@@ -271,17 +275,34 @@ InstallerWindow::StartScan()
|
|||||||
|
|
||||||
fCopyEngine.ScanDisksPartitions(fSrcMenu, fDestMenu);
|
fCopyEngine.ScanDisksPartitions(fSrcMenu, fDestMenu);
|
||||||
|
|
||||||
/*fSrcMenu->AddItem(new PartitionMenuItem("BeOS 5 PE Max Edition V3.1 beta",
|
|
||||||
new BMessage(SRC_PARTITION), "/BeOS 5 PE Max Edition V3.1 beta"));
|
|
||||||
*/
|
|
||||||
if (fSrcMenu->ItemAt(0)) {
|
if (fSrcMenu->ItemAt(0)) {
|
||||||
fSrcMenu->ItemAt(0)->SetMarked(true);
|
|
||||||
PublishPackages();
|
PublishPackages();
|
||||||
}
|
}
|
||||||
|
AdjustMenus();
|
||||||
SetStatusMessage("Choose the disk you want to install onto from the pop-up menu. Then click \"Begin\".");
|
SetStatusMessage("Choose the disk you want to install onto from the pop-up menu. Then click \"Begin\".");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
InstallerWindow::AdjustMenus()
|
||||||
|
{
|
||||||
|
PartitionMenuItem *item1 = (PartitionMenuItem *)fSrcMenu->FindMarked();
|
||||||
|
if (!item1) {
|
||||||
|
} else {
|
||||||
|
fSrcMenuField->MenuItem()->SetLabel(item1->MenuLabel());
|
||||||
|
}
|
||||||
|
|
||||||
|
PartitionMenuItem *item2 = (PartitionMenuItem *)fDestMenu->FindMarked();
|
||||||
|
if (!item2) {
|
||||||
|
} else {
|
||||||
|
fDestMenuField->MenuItem()->SetLabel(item2->MenuLabel());
|
||||||
|
}
|
||||||
|
char message[255];
|
||||||
|
sprintf(message, "Press the Begin button to install from '%s' onto '%s'", item1->Name(), item2->Name());
|
||||||
|
SetStatusMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
InstallerWindow::PublishPackages()
|
InstallerWindow::PublishPackages()
|
||||||
{
|
{
|
||||||
@@ -295,10 +316,10 @@ InstallerWindow::PublishPackages()
|
|||||||
BDiskDevice device;
|
BDiskDevice device;
|
||||||
BPartition *partition;
|
BPartition *partition;
|
||||||
if (roster.GetPartitionWithID(item->ID(), &device, &partition) == B_OK) {
|
if (roster.GetPartitionWithID(item->ID(), &device, &partition) == B_OK) {
|
||||||
if (partition->GetPath(&directory)!=B_OK)
|
if (partition->GetMountPoint(&directory)!=B_OK)
|
||||||
return;
|
return;
|
||||||
} else if (roster.GetDeviceWithID(item->ID(), &device) == B_OK) {
|
} else if (roster.GetDeviceWithID(item->ID(), &device) == B_OK) {
|
||||||
if (device.GetPath(&directory)!=B_OK)
|
if (device.GetMountPoint(&directory)!=B_OK)
|
||||||
return;
|
return;
|
||||||
} else
|
} else
|
||||||
return; // shouldn't happen
|
return; // shouldn't happen
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ private:
|
|||||||
void PublishPackages();
|
void PublishPackages();
|
||||||
void ShowBottom();
|
void ShowBottom();
|
||||||
void StartScan();
|
void StartScan();
|
||||||
|
void AdjustMenus();
|
||||||
static int ComparePackages(const void *firstArg, const void *secondArg);
|
static int ComparePackages(const void *firstArg, const void *secondArg);
|
||||||
BBox *fBackBox;
|
BBox *fBackBox;
|
||||||
BButton *fBeginButton, *fSetupButton;
|
BButton *fBeginButton, *fSetupButton;
|
||||||
|
|||||||
@@ -13,7 +13,9 @@
|
|||||||
|
|
||||||
#define ICON_ATTRIBUTE "INSTALLER PACKAGE: ICON"
|
#define ICON_ATTRIBUTE "INSTALLER PACKAGE: ICON"
|
||||||
|
|
||||||
static void
|
void SizeAsString(int32 size, char *string);
|
||||||
|
|
||||||
|
void
|
||||||
SizeAsString(int32 size, char *string)
|
SizeAsString(int32 size, char *string)
|
||||||
{
|
{
|
||||||
float kb = size / 1024.0;
|
float kb = size / 1024.0;
|
||||||
@@ -26,7 +28,17 @@ SizeAsString(int32 size, char *string)
|
|||||||
sprintf(string, "%3.1f KB", kb);
|
sprintf(string, "%3.1f KB", kb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sprintf(string, "%3.1f MB", mb);
|
float gb = mb / 1024.0;
|
||||||
|
if (gb < 1.0) {
|
||||||
|
sprintf(string, "%3.1f MB", mb);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
float tb = gb / 1024.0;
|
||||||
|
if (tb < 1.0) {
|
||||||
|
sprintf(string, "%3.1f GB", gb);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
sprintf(string, "%3.1f TB", tb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,14 +9,18 @@
|
|||||||
|
|
||||||
#include "PartitionMenuItem.h"
|
#include "PartitionMenuItem.h"
|
||||||
|
|
||||||
PartitionMenuItem::PartitionMenuItem(const char *label, BMessage *msg, partition_id id)
|
PartitionMenuItem::PartitionMenuItem(const char *name, const char *label, const char *menuLabel,
|
||||||
|
BMessage *msg, partition_id id)
|
||||||
: BMenuItem(label, msg)
|
: BMenuItem(label, msg)
|
||||||
{
|
{
|
||||||
fID = id;
|
fID = id;
|
||||||
|
fMenuLabel = strdup(menuLabel);
|
||||||
|
fName = strdup(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PartitionMenuItem::~PartitionMenuItem()
|
PartitionMenuItem::~PartitionMenuItem()
|
||||||
{
|
{
|
||||||
|
free(fMenuLabel);
|
||||||
|
free(fName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,11 +14,16 @@ const uint32 TARGET_PARTITION = 'iTPT';
|
|||||||
|
|
||||||
class PartitionMenuItem : public BMenuItem {
|
class PartitionMenuItem : public BMenuItem {
|
||||||
public:
|
public:
|
||||||
PartitionMenuItem(const char *label, BMessage *msg, partition_id id);
|
PartitionMenuItem(const char *name, const char *label,
|
||||||
|
const char* menuLabel, BMessage *msg, partition_id id);
|
||||||
~PartitionMenuItem();
|
~PartitionMenuItem();
|
||||||
partition_id ID() const { return fID; };
|
partition_id ID() const { return fID; };
|
||||||
|
const char *MenuLabel() { return fMenuLabel ? fMenuLabel : Label(); };
|
||||||
|
const char *Name() { return fName ? fName : Label(); };
|
||||||
private:
|
private:
|
||||||
partition_id fID;
|
partition_id fID;
|
||||||
|
char *fMenuLabel;
|
||||||
|
char *fName;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __PARTITIONMENUITEM_H_ */
|
#endif /* __PARTITIONMENUITEM_H_ */
|
||||||
|
|||||||
Reference in New Issue
Block a user