PersonView::PersonView(const char* name, BContact* contact, BFile* file)
	:
	BGridView(B_VERTICAL),
//	fGroups(NULL),
	fControls(20, false),
	fAddrView(NULL),
	fPictureView(NULL),
	fSaving(false),
	fContact(contact),
	fPhotoField(NULL),
	fFile(file)
{
	SetName(name);
	SetFlags(Flags() | B_WILL_DRAW);

	UpdatePicture(NULL);

	fInfoView = new BGridView(B_VERTICAL);

	fFieldsBox = new BBox("Contact informations",
		B_WILL_DRAW, B_FANCY_BORDER, fInfoView);

	//float spacing = be_control_look->DefaultItemSpacing();
	//fInfoView->GridLayout()->SetInsets(spacing);

	GridLayout()->AddView(fFieldsBox, 0, GridLayout()->CountRows());

	if (fFile)
		fFile->GetModificationTime(&fLastModificationTime);

	_LoadFieldsFromContact();
}
void
PersonView::UpdatePicture(BBitmap* bitmap)
{
	if (fPictureView == NULL) {
		fPictureView = new PictureView(70, 90, bitmap);

		GridLayout()->AddView(fPictureView, 0, 0, 1, 5);
		GridLayout()->ItemAt(0, 0)->SetExplicitAlignment(
			BAlignment(B_ALIGN_CENTER, B_ALIGN_TOP));

		return;
	}

	if (fSaving)
		return;
/*
	time_t modificationTime = 0;
	BEntry entry(ref);
	entry.GetModificationTime(&modificationTime);

	if (entry.InitCheck() == B_OK
		&& modificationTime <= fLastModificationTime) {
		return;
	}*/

	fPictureView->Update(bitmap);
}
示例#3
0
PersonView::PersonView(const char* name, const char* categoryAttribute,
		const entry_ref *ref)
	:
	BGridView(),
	fLastModificationTime(0),
	fGroups(NULL),
	fControls(20, false),
	fCategoryAttribute(categoryAttribute),
	fPictureView(NULL),
	fSaving(false)
{
	SetName(name);
	SetFlags(Flags() | B_WILL_DRAW);

	fRef = ref;
	BFile* file = NULL;
	if (fRef != NULL)
		file = new BFile(fRef, B_READ_ONLY);

	// Add picture "field", using ID photo 35mm x 45mm ratio
	fPictureView = new PictureView(70, 90, ref);

	BGridLayout* layout = GridLayout();

	float spacing = be_control_look->DefaultItemSpacing();
	layout->SetInsets(spacing, spacing, spacing, spacing);

	layout->AddView(fPictureView, 0, 0, 1, 5);
	layout->ItemAt(0, 0)->SetExplicitAlignment(
		BAlignment(B_ALIGN_CENTER, B_ALIGN_TOP));

	if (file != NULL)
		file->GetModificationTime(&fLastModificationTime);
	delete file;
}
PersonView::PersonView(const char* name, BContact* contact, BFile* file)
	:
	BGridView(),
//	fGroups(NULL),
	fControls(20, false),
	fPictureView(NULL),
	fSaving(false),
	fSaved(true),
	fContact(contact),
	fPhotoField(NULL),
	fContactFile(file)
{
	SetName(name);
	SetFlags(Flags() | B_WILL_DRAW);

	UpdatePicture(NULL);
	fAddressWindow = NULL;

	float spacing = be_control_look->DefaultItemSpacing();
		
	GridLayout()->SetInsets(spacing, spacing, spacing, spacing);

	_LoadFieldsFromContact();
	if (fContactFile)
		fContactFile->GetModificationTime(&fLastModificationTime);
}
void
PersonView::UpdatePicture(BBitmap* bitmap)
{
	if (fPictureView == NULL) {
		fPictureView = new PictureView(70, 90, bitmap);

		GridLayout()->AddView(fPictureView, 0, 0, 1, 5);
		GridLayout()->ItemAt(0, 0)->SetExplicitAlignment(
			BAlignment(B_ALIGN_CENTER, B_ALIGN_TOP));
		return;
	}

	if (fSaving)
		return;

	fPictureView->Update(bitmap);
}
示例#6
0
void
PersonView::Draw(BRect updateRect)
{
	if (!fPictureView)
		return;

	// Draw a alert/get info-like strip
	BRect stripeRect = Bounds();
	stripeRect.right = GridLayout()->HorizontalSpacing()
		+ fPictureView->Bounds().Width() / 2;
	SetHighColor(tint_color(ViewColor(), B_DARKEN_1_TINT));
	FillRect(stripeRect);
}
示例#7
0
void LetterChooser::CalculatePositions()
{

	switch(mLayoutScheme)
	{
		case GRID:
			GridLayout();
			break;
		case SINE:
			SineLayout();
			break;
		case RANDOM:
		default:
			RandomLayout();
			break;
	}
}
示例#8
0
void
PersonView::AddAttribute(const char* label, const char* attribute)
{
	// Check if this attribute has already been added.
	AttributeTextControl* control = NULL;
	for (int32 i = fControls.CountItems() - 1; i >= 0; i--) {
		if (fControls.ItemAt(i)->Attribute() == attribute) {
			return;
		}
	}

	control = new AttributeTextControl(label, attribute);
	fControls.AddItem(control);

	BGridLayout* layout = GridLayout();
	int32 row = fControls.CountItems();

	if (fCategoryAttribute == attribute) {
		// Special case the category attribute. The Group popup field will
		// be added as the label instead.
		fGroups = new BPopUpMenu(label);
		fGroups->SetRadioMode(false);
		BuildGroupMenu();

		BMenuField* field = new BMenuField("", "", fGroups);
		field->SetEnabled(true);
		layout->AddView(field, 1, row);

		control->SetLabel("");
		layout->AddView(control, 2, row);
	} else {
		layout->AddItem(control->CreateLabelLayoutItem(), 1, row);
		layout->AddItem(control->CreateTextViewLayoutItem(), 2, row);
	}

	SetAttribute(attribute, true);
}