Now it even looks like the original, at least a bit :-)

Still doesn't do anything, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16334 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2006-02-10 15:32:54 +00:00
parent 3a3f6c1ee9
commit d2dcb851e6
3 changed files with 198 additions and 10 deletions
+3 -3
View File
@@ -42,7 +42,7 @@ class FileTypes : public BApplication {
BFilePanel *fFilePanel;
BWindow *fTypesWindow;
uint32 fWindowCount;
BPoint fTypesWindowPosition;
BRect fTypesWindowFrame;
};
@@ -52,7 +52,7 @@ FileTypes::FileTypes()
fWindowCount(0)
{
fFilePanel = new BFilePanel();
fTypesWindowPosition = BPoint(100.0f, 100.0f);
fTypesWindowFrame = BRect(80.0f, 80.0f, 540.0f, 440.0f);
// TODO: read from settings
}
@@ -146,7 +146,7 @@ FileTypes::MessageReceived(BMessage *message)
switch (message->what) {
case kMsgOpenTypesWindow:
if (fTypesWindow == NULL) {
fTypesWindow = new FileTypesWindow(fTypesWindowPosition);
fTypesWindow = new FileTypesWindow(fTypesWindowFrame);
fTypesWindow->Show();
fWindowCount++;
} else
+194 -6
View File
@@ -8,16 +8,23 @@
#include "FileTypesWindow.h"
#include <Application.h>
#include <Box.h>
#include <Button.h>
#include <ListView.h>
#include <MenuBar.h>
#include <MenuField.h>
#include <MenuItem.h>
#include <Mime.h>
#include <PopUpMenu.h>
#include <ScrollView.h>
#include <TextControl.h>
#include <be_apps/Tracker/RecentItems.h>
FileTypesWindow::FileTypesWindow(BPoint position)
: BWindow(BRect(position.x, position.y, position.x + 300, position.y + 200),
"FileTypes", B_TITLED_WINDOW,
B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS)
FileTypesWindow::FileTypesWindow(BRect frame)
: BWindow(frame, "FileTypes", B_TITLED_WINDOW,
B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS)
{
// add the menu
@@ -33,6 +40,8 @@ FileTypesWindow::FileTypesWindow(BPoint position)
BMenuItem* item = new BMenuItem(recentsMenu, new BMessage(kMsgOpenFilePanel));
item->SetShortcut('O', B_COMMAND_KEY);
menu->AddItem(item);
menu->AddItem(new BMenuItem("Application Types" B_UTF8_ELLIPSIS,
new BMessage));
menu->AddSeparatorItem();
menu->AddItem(new BMenuItem("About FileTypes" B_UTF8_ELLIPSIS,
@@ -44,12 +53,191 @@ FileTypesWindow::FileTypesWindow(BPoint position)
menu->SetTargetForItems(be_app);
item->SetTarget(this);
menuBar->AddItem(menu);
// MIME Types list
BRect rect = Bounds();
rect.top = menuBar->Bounds().Height() + 1;
rect.top = menuBar->Bounds().Height() + 1.0f;
BView* topView = new BView(rect, NULL, B_FOLLOW_ALL, B_WILL_DRAW);
topView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
AddChild(topView);
BButton* button = new BButton(rect, "add", "Add" B_UTF8_ELLIPSIS, NULL,
B_FOLLOW_BOTTOM);
button->ResizeToPreferred();
button->MoveTo(8.0f, topView->Bounds().bottom - 8.0f - button->Bounds().Height());
topView->AddChild(button);
rect = button->Frame();
rect.OffsetBy(rect.Width() + 6.0f, 0.0f);
button = new BButton(rect, "remove", "Remove", NULL, B_FOLLOW_BOTTOM);
button->ResizeToPreferred();
topView->AddChild(button);
rect.bottom = rect.top - 10.0f;
rect.top = 10.0f;
rect.left = 10.0f;
rect.right -= B_V_SCROLL_BAR_WIDTH + 2.0f;
BListView* listView = new BListView(rect, "listview", B_SINGLE_SELECTION_LIST,
B_FOLLOW_LEFT | B_FOLLOW_TOP_BOTTOM);
BScrollView* scrollView = new BScrollView("scrollview", listView,
B_FOLLOW_LEFT | B_FOLLOW_TOP_BOTTOM, B_FRAME_EVENTS | B_WILL_DRAW, false, true);
topView->AddChild(scrollView);
// "Icon" group
BFont font(be_bold_font);
float labelWidth = font.StringWidth("Icon");
font_height fontHeight;
font.GetHeight(&fontHeight);
rect.left = rect.right + 12.0f + B_V_SCROLL_BAR_WIDTH;
rect.right = rect.left + max_c(B_LARGE_ICON, labelWidth) + 32.0f;
rect.bottom = rect.top + ceilf(fontHeight.ascent)
+ max_c(B_LARGE_ICON, button->Bounds().Height() * 2.0f + 4.0f) + 12.0f;
rect.top -= 2.0f;
BBox* box = new BBox(rect);
box->SetLabel("Icon");
topView->AddChild(box);
BRect innerRect = BRect(0.0f, 0.0f, B_LARGE_ICON - 1.0f, B_LARGE_ICON - 1.0f);
innerRect.OffsetTo((rect.Width() - innerRect.Width()) / 2.0f,
(rect.Height() - innerRect.Height()) / 2.0f);
BBox* iconBox = new BBox(innerRect, "icon box", B_FOLLOW_LEFT | B_FOLLOW_TOP,
B_PLAIN_BORDER);
box->AddChild(iconBox);
// "File Extensions" group
BRect rightRect(rect);
rightRect.left = rect.right + 8.0f;
rightRect.right = topView->Bounds().Width() - 8.0f;
box = new BBox(rightRect, NULL, B_FOLLOW_LEFT_RIGHT);
box->SetLabel("File Extensions");
topView->AddChild(box);
innerRect = box->Bounds().InsetByCopy(8.0f, 6.0f);
innerRect.top += ceilf(fontHeight.ascent);
innerRect.left = innerRect.right - button->StringWidth("Remove") - 16.0f;
innerRect.bottom = innerRect.top + button->Bounds().Height();
button = new BButton(innerRect, "add ext", "Add" B_UTF8_ELLIPSIS, NULL,
B_FOLLOW_RIGHT);
box->AddChild(button);
innerRect.OffsetBy(0, innerRect.Height() + 4.0f);
button = new BButton(innerRect, "remove ext", "Remove", NULL, B_FOLLOW_RIGHT);
box->AddChild(button);
innerRect.right = innerRect.left - 10.0f - B_V_SCROLL_BAR_WIDTH;
innerRect.left = 10.0f;
innerRect.top = 8.0f + ceilf(fontHeight.ascent);
innerRect.bottom -= 2.0f;
// take scrollview border into account
listView = new BListView(innerRect, "listview ext", B_SINGLE_SELECTION_LIST,
B_FOLLOW_LEFT_RIGHT);
scrollView = new BScrollView("scrollview ext", listView,
B_FOLLOW_LEFT_RIGHT, B_FRAME_EVENTS | B_WILL_DRAW, false, true);
box->AddChild(scrollView);
// "Description" group
rect.top = rect.bottom + 8.0f;
rect.bottom = rect.top + ceilf(fontHeight.ascent) + 19.0f;
rect.right = rightRect.right;
box = new BBox(rect, NULL, B_FOLLOW_LEFT_RIGHT);
box->SetLabel("Description");
topView->AddChild(box);
innerRect = box->Bounds().InsetByCopy(8.0f, 6.0f);
innerRect.top += ceilf(fontHeight.ascent);
innerRect.bottom = innerRect.top + button->Bounds().Height();
BTextControl* control = new BTextControl(innerRect, "internal", "Internal Name:", "",
NULL, B_FOLLOW_LEFT_RIGHT);
labelWidth = control->StringWidth(control->Label()) + 2.0f;
control->SetDivider(labelWidth);
control->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT);
control->SetEnabled(false);
box->ResizeBy(0, control->Bounds().Height() * 2.0f);
box->AddChild(control);
innerRect.OffsetBy(0, control->Bounds().Height() + 5.0f);
control = new BTextControl(innerRect, "type", "Type Name:", "",
NULL, B_FOLLOW_LEFT_RIGHT);
control->SetDivider(labelWidth);
control->SetAlignment(B_ALIGN_RIGHT, B_ALIGN_LEFT);
box->AddChild(control);
// "Preferred Application" group
rect = box->Frame();
rect.top = rect.bottom + 8.0f;
rect.bottom = rect.top + ceilf(fontHeight.ascent)
+ button->Bounds().Height() + 14.0f;
box = new BBox(rect, NULL, B_FOLLOW_LEFT_RIGHT);
box->SetLabel("Preferred Application");
topView->AddChild(box);
innerRect = box->Bounds().InsetByCopy(8.0f, 6.0f);
innerRect.top += ceilf(fontHeight.ascent);
innerRect.left = innerRect.right - button->StringWidth("Same As" B_UTF8_ELLIPSIS) - 24.0f;
innerRect.bottom = innerRect.top + button->Bounds().Height();
button = new BButton(innerRect, "same as", "Same As" B_UTF8_ELLIPSIS, NULL,
B_FOLLOW_RIGHT);
box->AddChild(button);
innerRect.OffsetBy(-innerRect.Width() - 6.0f, 0.0f);
button = new BButton(innerRect, "select", "Select" B_UTF8_ELLIPSIS, NULL,
B_FOLLOW_RIGHT);
box->AddChild(button);
menu = new BPopUpMenu("preferred");
menu->AddItem(item = new BMenuItem("None", NULL));
item->SetMarked(true);
innerRect.right = innerRect.left - 6.0f;
innerRect.left = 8.0f;
BMenuField* menuField = new BMenuField(innerRect, "preferred", NULL, menu,
B_FOLLOW_LEFT_RIGHT);
float width, height;
menuField->GetPreferredSize(&width, &height);
menuField->ResizeTo(innerRect.Width(), height);
menuField->MoveBy(0.0f, (innerRect.Height() - height) / 2.0f);
box->AddChild(menuField);
// "Extra Attributes" group
rect.top = rect.bottom + 8.0f;
rect.bottom = topView->Bounds().Height() - 8.0f;
box = new BBox(rect, NULL, B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP_BOTTOM);
box->SetLabel("Extra Attributes");
topView->AddChild(box);
innerRect = box->Bounds().InsetByCopy(8.0f, 6.0f);
innerRect.top += ceilf(fontHeight.ascent);
innerRect.left = innerRect.right - button->StringWidth("Remove") - 16.0f;
innerRect.bottom = innerRect.top + button->Bounds().Height();
button = new BButton(innerRect, "add attr", "Add" B_UTF8_ELLIPSIS, NULL,
B_FOLLOW_RIGHT);
box->AddChild(button);
innerRect.OffsetBy(0, innerRect.Height() + 4.0f);
button = new BButton(innerRect, "remove attr", "Remove", NULL, B_FOLLOW_RIGHT);
box->AddChild(button);
innerRect.right = innerRect.left - 10.0f - B_V_SCROLL_BAR_WIDTH;
innerRect.left = 10.0f;
innerRect.top = 8.0f + ceilf(fontHeight.ascent);
innerRect.bottom = box->Bounds().bottom - 10.0f;
// take scrollview border into account
listView = new BListView(innerRect, "listview attr", B_SINGLE_SELECTION_LIST,
B_FOLLOW_ALL);
scrollView = new BScrollView("scrollview attr", listView,
B_FOLLOW_ALL, B_FRAME_EVENTS | B_WILL_DRAW, false, true);
box->AddChild(scrollView);
SetSizeLimits(rightRect.left + 72.0f + font.StringWidth("File Extensions"), 32767.0f,
rect.top + 2.0f * button->Bounds().Height() + fontHeight.ascent + 32.0f
+ menuBar->Bounds().Height(), 32767.0f);
}
+1 -1
View File
@@ -11,7 +11,7 @@
class FileTypesWindow : public BWindow {
public:
FileTypesWindow(BPoint position);
FileTypesWindow(BRect frame);
virtual ~FileTypesWindow();
virtual void MessageReceived(BMessage* message);