more copy loop control methods

added a size view


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14268 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval
2005-09-28 16:15:02 +00:00
parent 83e02263b7
commit 61b3e949b4
6 changed files with 141 additions and 22 deletions
@@ -5,8 +5,9 @@
*/
#include "InstallerCopyLoopControl.h"
InstallerCopyLoopControl::InstallerCopyLoopControl()
: CopyLoopControl()
InstallerCopyLoopControl::InstallerCopyLoopControl(InstallerWindow *window)
: CopyLoopControl(),
fWindow(window)
{
}
@@ -14,3 +15,69 @@ InstallerCopyLoopControl::InstallerCopyLoopControl()
InstallerCopyLoopControl::~InstallerCopyLoopControl(void)
{
}
bool
InstallerCopyLoopControl::FileError(const char *message, const char *name, status_t error,
bool allowContinue)
{
return false;
}
void
InstallerCopyLoopControl::UpdateStatus(const char *name, entry_ref ref, int32 count,
bool optional)
{
}
bool
InstallerCopyLoopControl::CheckUserCanceled()
{
return false;
}
InstallerCopyLoopControl::OverwriteMode
InstallerCopyLoopControl::OverwriteOnConflict(const BEntry *srcEntry,
const char *destName, const BDirectory *destDir, bool srcIsDir,
bool dstIsDir)
{
return kReplace;
}
bool
InstallerCopyLoopControl::SkipEntry(const BEntry *, bool file)
{
return false;
}
void
InstallerCopyLoopControl::ChecksumChunk(const char *block, size_t size)
{
}
bool
InstallerCopyLoopControl::ChecksumFile(const entry_ref *ref)
{
return true;
}
bool
InstallerCopyLoopControl::SkipAttribute(const char *attributeName)
{
return false;
}
bool
InstallerCopyLoopControl::PreserveAttribute(const char *attributeName)
{
return false;
}
+23 -2
View File
@@ -8,14 +8,35 @@
#define _INSTALLERCOPYLOOPCONTROL_H
#include "FSUtils.h"
#include "InstallerWindow.h"
class InstallerCopyLoopControl : public CopyLoopControl
{
public:
InstallerCopyLoopControl();
~InstallerCopyLoopControl(void);
InstallerCopyLoopControl(InstallerWindow *window);
~InstallerCopyLoopControl(void);
virtual bool FileError(const char *message, const char *name, status_t error,
bool allowContinue);
virtual void UpdateStatus(const char *name, entry_ref ref, int32 count,
bool optional = false);
virtual bool CheckUserCanceled();
virtual OverwriteMode OverwriteOnConflict(const BEntry *srcEntry,
const char *destName, const BDirectory *destDir, bool srcIsDir,
bool dstIsDir);
virtual bool SkipEntry(const BEntry *, bool file);
virtual void ChecksumChunk(const char *block, size_t size);
virtual bool ChecksumFile(const entry_ref *);
virtual bool SkipAttribute(const char *attributeName);
virtual bool PreserveAttribute(const char *attributeName);
private:
InstallerWindow *fWindow;
};
#endif
+18 -2
View File
@@ -24,6 +24,7 @@ const uint32 SETUP_MESSAGE = 'iSEP';
const uint32 START_SCAN = 'iSSC';
const uint32 SRC_PARTITION = 'iSPT';
const uint32 DST_PARTITION = 'iDPT';
const uint32 PACKAGE_CHECKBOX = 'iPCB';
InstallerWindow::InstallerWindow(BRect frame_rect)
: BWindow(frame_rect, "Installer", B_TITLED_WINDOW, B_NOT_ZOOMABLE | B_NOT_RESIZABLE),
@@ -84,7 +85,14 @@ InstallerWindow::InstallerWindow(BRect frame_rect)
fDestMenuField->SetDivider(70.0);
fDestMenuField->SetAlignment(B_ALIGN_RIGHT);
fBackBox->AddChild(fDestMenuField);
BRect sizeRect = fBackBox->Bounds();
sizeRect.top = sizeRect.bottom - 15;
sizeRect.left = sizeRect.right - 100;
fSizeView = new BStringView(sizeRect, "size_view", "Disk space required : 0.0 KB");
fSizeView->SetAlignment(B_ALIGN_RIGHT);
fBackBox->AddChild(fSizeView);
// finish creating window
Show();
@@ -118,6 +126,14 @@ InstallerWindow::MessageReceived(BMessage *msg)
case SETUP_MESSAGE:
LaunchDriveSetup();
break;
case PACKAGE_CHECKBOX: {
char buffer[15];
fPackagesView->GetTotalSizeAsString(buffer);
char string[255];
sprintf(string, "Disk space required: %s", buffer);
fSizeView->SetText(string);
break;
}
case B_SOME_APP_LAUNCHED:
case B_SOME_APP_QUIT:
{
@@ -236,7 +252,7 @@ InstallerWindow::PublishPackages()
}
packages.SortItems(ComparePackages);
fPackagesView->AddPackages(packages);
fPackagesView->AddPackages(packages, new BMessage(PACKAGE_CHECKBOX));
}
+1
View File
@@ -39,6 +39,7 @@ private:
BMenuField* fSrcMenuField, *fDestMenuField;
PackagesView *fPackagesView;
BScrollView *fPackagesScrollView;
BStringView *fSizeView;
};
#endif /* _InstallerWindow_h */
+28 -15
View File
@@ -13,6 +13,23 @@
#define ICON_ATTRIBUTE "INSTALLER PACKAGE: ICON"
static void
SizeAsString(int32 size, char *string)
{
float kb = size / 1024.0;
if (kb < 1.0) {
sprintf(string, "%ld B", size);
return;
}
float mb = kb / 1024.0;
if (mb < 1.0) {
sprintf(string, "%3.1f KB", kb);
return;
}
sprintf(string, "%3.1f MB", mb);
}
Package::Package()
: Group(),
fName(NULL),
@@ -83,18 +100,7 @@ err:
void
Package::GetSizeAsString(char *string)
{
float kb = fSize / 1024.0;
if (kb < 1.0) {
sprintf(string, "%ld B", fSize);
return;
}
float mb = kb / 1024.0;
if (mb < 1.0) {
sprintf(string, "%3.1f KB", kb);
return;
}
sprintf(string, "%3.1f MB", mb);
SizeAsString(fSize, string);
}
@@ -126,7 +132,7 @@ void
PackageCheckBox::Draw(BRect update)
{
BCheckBox::Draw(update);
char string[255];
char string[15];
fPackage.GetSizeAsString(string);
float width = StringWidth(string);
DrawString(string, BPoint(Bounds().right - width - 8, 11));
@@ -152,7 +158,6 @@ GroupView::~GroupView()
PackagesView::PackagesView(BRect rect, const char* name)
: BView(rect, name, B_FOLLOW_ALL_SIDES, B_WILL_DRAW|B_FRAME_EVENTS)
{
}
@@ -170,7 +175,7 @@ PackagesView::Clean()
void
PackagesView::AddPackages(BList &packages)
PackagesView::AddPackages(BList &packages, BMessage *msg)
{
int32 count = packages.CountItems();
BRect rect = Bounds();
@@ -193,6 +198,7 @@ PackagesView::AddPackages(BList &packages)
PackageCheckBox *checkBox = new PackageCheckBox(rect, *package);
checkBox->SetValue(package->OnByDefault() ? B_CONTROL_ON : B_CONTROL_OFF);
checkBox->SetEnabled(!package->AlwaysOn());
checkBox->SetMessage(msg);
AddChild(checkBox);
rect.OffsetBy(0, 20);
}
@@ -212,3 +218,10 @@ PackagesView::AddPackages(BList &packages)
Invalidate();
}
void
PackagesView::GetTotalSizeAsString(char *string)
{
SizeAsString(0, string);
}
+2 -1
View File
@@ -76,7 +76,8 @@ public:
PackagesView(BRect rect, const char* name);
virtual ~PackagesView();
void Clean();
void AddPackages(BList &list);
void AddPackages(BList &list, BMessage *msg);
void GetTotalSizeAsString(char *string);
private:
BList fViews;
};