[haiku-commits] haiku: hrev45583 - src/kits/tracker

  • From: jscipione@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 29 Apr 2013 05:49:53 +0200 (CEST)

hrev45583 adds 6 changesets to branch 'master'
old head: 72fb3d3984850bbc56838a6fde14f096285201b2
new head: f542c5137df69a6f17e454e4537e4c858a364774
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=f542c51+%5E72fb3d3

----------------------------------------------------------------------------

955d638: Close window on Esc

32994cb: Style fixes and code simplifications

337a12f: Another style fix

e001e60: Consolidate strings so they are added to the catalog just once.

2db4f18: Make logic menu field more font dynamic, wasn't working for Japanese
  
  Some style fixes and code simplications too.

f542c51: Fix bug involving the condition string being removed when it shouldn't
  
  This bug occured when you selected from the mime type menu field while in
  attribute mode. The rows are removed and added again but the condition string
  view was left out because the menu item wasn't marked yet. Reordered to remove
  row, then set marked, then add row checking if marked and adding the condition
  string view based on the marked mime type. If no mime types are set it uses 
the
  first mimetype instead which is what we want in that case.

                                     [ John Scipione <jscipione@xxxxxxxxx> ]

----------------------------------------------------------------------------

1 file changed, 131 insertions(+), 109 deletions(-)
src/kits/tracker/FindPanel.cpp | 240 ++++++++++++++++++++-----------------

############################################################################

Commit:      955d6389af42ab21304247b7e58f9e357557342c
URL:         http://cgit.haiku-os.org/haiku/commit/?id=955d638
Author:      John Scipione <jscipione@xxxxxxxxx>
Date:        Mon Apr 29 03:35:54 2013 UTC

Close window on Esc

----------------------------------------------------------------------------

diff --git a/src/kits/tracker/FindPanel.cpp b/src/kits/tracker/FindPanel.cpp
index 3dce126..b06ec97 100644
--- a/src/kits/tracker/FindPanel.cpp
+++ b/src/kits/tracker/FindPanel.cpp
@@ -187,7 +187,8 @@ MoreOptionsStruct::QueryTemporary(const BNode* node)
 FindWindow::FindWindow(const entry_ref* newRef, bool editIfTemplateOnly)
        :
        BWindow(kInitialRect, B_TRANSLATE("Find"), B_TITLED_WINDOW,
-               B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_AUTO_UPDATE_SIZE_LIMITS),
+               B_NOT_RESIZABLE | B_NOT_ZOOMABLE | B_CLOSE_ON_ESCAPE
+               | B_AUTO_UPDATE_SIZE_LIMITS),
        fFile(TryOpening(newRef)),
        fFromTemplate(false),
        fEditTemplateOnly(false),

############################################################################

Commit:      32994cb474ef344068441b486d266e0d5e462477
URL:         http://cgit.haiku-os.org/haiku/commit/?id=32994cb
Author:      John Scipione <jscipione@xxxxxxxxx>
Date:        Mon Apr 29 03:38:04 2013 UTC

Style fixes and code simplifications

----------------------------------------------------------------------------

diff --git a/src/kits/tracker/FindPanel.cpp b/src/kits/tracker/FindPanel.cpp
index b06ec97..16e1f8f 100644
--- a/src/kits/tracker/FindPanel.cpp
+++ b/src/kits/tracker/FindPanel.cpp
@@ -698,8 +698,7 @@ FindPanel::FindPanel(BFile* node, FindWindow* parent, bool 
fromTemplate,
 
        fMimeTypeField = new BMenuField("MimeTypeMenu", "", fMimeTypeMenu);
        fMimeTypeField->SetDivider(0.0f);
-       fMimeTypeField->MenuItem()->SetLabel(
-               B_TRANSLATE("All files and folders"));
+       fMimeTypeField->MenuItem()->SetLabel(B_TRANSLATE("All files and 
folders"));
        // add popup for search criteria
        fSearchModeMenu = new BPopUpMenu("searchMode");
        fSearchModeMenu->AddItem(new BMenuItem(B_TRANSLATE("by name"),
@@ -1150,20 +1149,25 @@ FindPanel::MessageReceived(BMessage* message)
                        if (message->FindPointer("source", (void**)&item) != 
B_OK)
                                return;
 
-                       if (item->Submenu()->ItemAt(0))
+                       if (item->Submenu()->ItemAt(0) != NULL)
                                item->Submenu()->ItemAt(0)->SetMarked(true);
+
                        Invalidate();
                        break;
 
                case kLatchChanged:
+               {
                        int32 value;
-                       if (message->FindInt32("be:value", &value) == B_OK) {
-                               if (value == 0 && !fMoreOptions->IsHidden(this))
-                                       fMoreOptions->Hide();
-                               else if (value == 1 && 
fMoreOptions->IsHidden(this))
-                                       fMoreOptions->Show();
-                       }
+                       if (message->FindInt32("be:value", &value) != B_OK)
+                               break;
+
+                       if (value == 0 && !fMoreOptions->IsHidden(this))
+                               fMoreOptions->Hide();
+                       else if (value == 1 && fMoreOptions->IsHidden(this))
+                               fMoreOptions->Show();
+
                        break;
+               }
 
                case B_SAVE_REQUESTED:
                {
@@ -1635,24 +1639,28 @@ FindPanel::SetCurrentMimeType(BMenuItem* item)
 
                BMenuItem* search;
                for (int32 i = 2; (search = MimeTypeMenu()->ItemAt(i)) != NULL; 
i++) {
-                       if (item == search || !search->Label())
+                       if (item == search || search->Label() == NULL)
                                continue;
-                       if (strcmp(item->Label(),search->Label()) == 0) {
+
+                       if (strcmp(item->Label(), search->Label()) == 0) {
                                search->SetMarked(true);
                                break;
                        }
+
                        BMenu* submenu = search->Submenu();
-                       if (submenu) {
-                               for (int32 j = submenu->CountItems();j-- > 0;) {
-                                       BMenuItem* sub = submenu->ItemAt(j);
-                                       if (strcmp(item->Label(),sub->Label()) 
== 0) {
-                                               sub->SetMarked(true);
-                                               break;
-                                       }
+                       if (submenu == NULL)
+                               continue;
+
+                       for (int32 j = submenu->CountItems(); j-- > 0;) {
+                               BMenuItem* sub = submenu->ItemAt(j);
+                               if (strcmp(item->Label(),sub->Label()) == 0) {
+                                       sub->SetMarked(true);
+                                       break;
                                }
                        }
                }
        }
+
        return B_OK;
 }
 
@@ -1781,22 +1789,24 @@ FindPanel::AddMimeTypesToMenu()
                }
        }
 
-       if (tracker)
+       if (tracker != NULL) {
                
tracker->MimeTypes()->EachCommonType(&FindPanel::AddOneMimeTypeToMenu,
                        MimeTypeMenu());
+       }
 
        // remove empty super type menus (and set target)
 
-       for (int32 index = MimeTypeMenu()->CountItems();index-- > 2;) {
+       for (int32 index = MimeTypeMenu()->CountItems(); index-- > 2;) {
                BMenuItem* item = MimeTypeMenu()->ItemAt(index);
                BMenu* submenu = item->Submenu();
-               if (submenu != NULL) {
-                       if (submenu->CountItems() == 0) {
-                               MimeTypeMenu()->RemoveItem(item);
-                               delete item;
-                       } else
-                               submenu->SetTargetForItems(this);
-               }
+               if (submenu == NULL)
+                       continue;
+
+               if (submenu->CountItems() == 0) {
+                       MimeTypeMenu()->RemoveItem(item);
+                       delete item;
+               } else
+                       submenu->SetTargetForItems(this);
        }
 
        MimeTypeMenu()->SetTargetForItems(this);
@@ -2405,6 +2415,7 @@ FindPanel::RemoveAttrViewItems(bool removeGrid)
                child->RemoveSelf();
                delete child;
        }
+
        if (removeGrid) {
                view->RemoveSelf();
                delete view;
@@ -2549,7 +2560,6 @@ FindPanel::AddAttributeControls(int32 gridRow)
 
        // target everything
        menu->SetTargetForItems(this);
-
        for (int32 index = menu->CountItems() - 1; index >= 0; index--)
                menu->SubmenuAt(index)->SetTargetForItems(this);
 
@@ -2591,7 +2601,7 @@ FindPanel::RestoreAttrState(const BMessage &message, 
int32 index)
        int32 logicMenuSelectedIndex;
        BMenuField* field = dynamic_cast<BMenuField*>(FindAttrView("Logic", 
index));
        if (message.FindInt32("logicalRelation", index,
-               &logicMenuSelectedIndex) == B_OK) {
+                       &logicMenuSelectedIndex) == B_OK) {
                if (field)
                        
field->Menu()->ItemAt(logicMenuSelectedIndex)->SetMarked(true);
                else
@@ -2631,7 +2641,7 @@ FindPanel::SaveAttrState(BMessage* message, int32 index)
        message->AddString("attrViewText", textControl->TextView()->Text());
 
        BMenuField* field = dynamic_cast<BMenuField*>(FindAttrView("Logic", 
index));
-       if (field) {
+       if (field != NULL) {
                BMenuItem* item = field->Menu()->FindMarked();
                ASSERT(item);
                message->AddInt32("logicalRelation",

############################################################################

Commit:      337a12f63fbcb793b6dc5df5821b48c64b2dbc02
URL:         http://cgit.haiku-os.org/haiku/commit/?id=337a12f
Author:      John Scipione <jscipione@xxxxxxxxx>
Date:        Mon Apr 29 03:39:49 2013 UTC

Another style fix

----------------------------------------------------------------------------

diff --git a/src/kits/tracker/FindPanel.cpp b/src/kits/tracker/FindPanel.cpp
index 16e1f8f..14107eb 100644
--- a/src/kits/tracker/FindPanel.cpp
+++ b/src/kits/tracker/FindPanel.cpp
@@ -1775,7 +1775,7 @@ FindPanel::AddMimeTypesToMenu()
                const char* superType;
                int32 index = 0;
 
-               while (types.FindString("super_types",index++,&superType) == 
B_OK) {
+               while (types.FindString("super_types", index++, &superType) == 
B_OK) {
                        BMenu* superMenu = new BMenu(superType);
 
                        BMessage* message = new BMessage(kMIMETypeItem);

############################################################################

Commit:      e001e604b912e8fcba0330ce134873fbc115a6df
URL:         http://cgit.haiku-os.org/haiku/commit/?id=e001e60
Author:      John Scipione <jscipione@xxxxxxxxx>
Date:        Mon Apr 29 03:41:34 2013 UTC

Consolidate strings so they are added to the catalog just once.

----------------------------------------------------------------------------

diff --git a/src/kits/tracker/FindPanel.cpp b/src/kits/tracker/FindPanel.cpp
index 14107eb..f0cc2c1 100644
--- a/src/kits/tracker/FindPanel.cpp
+++ b/src/kits/tracker/FindPanel.cpp
@@ -109,6 +109,28 @@ static const char* kDragNDropActionSpecifiers [] = {
 
 const uint32 kAttachFile = 'attf';
 
+static const int32 operators[] = {
+       B_CONTAINS,
+       B_EQ,
+       B_NE,
+       B_BEGINS_WITH,
+       B_ENDS_WITH,
+       B_GE,
+       B_LE
+};
+
+static const char* operatorLabels[] = {
+       B_TRANSLATE_MARK("contains"),
+       B_TRANSLATE_MARK("is"),
+       B_TRANSLATE_MARK("is not"),
+       B_TRANSLATE_MARK("starts with"),
+       B_TRANSLATE_MARK("ends with"),
+       B_TRANSLATE_MARK("greater than"),
+       B_TRANSLATE_MARK("less than"),
+       B_TRANSLATE_MARK("before"),
+       B_TRANSLATE_MARK("after")
+};
+
 
 namespace BPrivate {
 
@@ -2483,29 +2505,18 @@ FindPanel::AddAttributeControls(int32 gridRow)
        BMenuItem* item = new BMenuItem(submenu, message);
        menu->AddItem(item);
 
-       const int32 operators[] = {
-               B_CONTAINS,
-               B_EQ,
-               B_NE,
-               B_BEGINS_WITH,
-               B_ENDS_WITH};
-       static const char* operatorLabels[] = {
-               B_TRANSLATE_MARK("contains"),
-               B_TRANSLATE_MARK("is"),
-               B_TRANSLATE_MARK("is not"),
-               B_TRANSLATE_MARK("starts with"),
-               B_TRANSLATE_MARK("ends with")};
-
        for (int32 i = 0; i < 5; i++) {
                message = new BMessage(kAttributeItem);
                message->AddInt32("operator", operators[i]);
-               submenu->AddItem(new BMenuItem(B_TRANSLATE_NOCOLLECT(
-                       operatorLabels[i]), message));
+               submenu->AddItem(new BMenuItem(
+                       B_TRANSLATE_NOCOLLECT(operatorLabels[i]), message));
        }
 
-       // mark first item
-       menu->ItemAt(0)->SetMarked(true);
-       submenu->ItemAt(0)->SetMarked(true);
+       // mark first items if not marked
+       if (menu->FindMarked() == NULL)
+               menu->ItemAt(0)->SetMarked(true);
+       if (submenu->FindMarked() == NULL)
+               submenu->ItemAt(0)->SetMarked(true);
 
        // add SIZE attribute
        submenu = new BMenu(B_TRANSLATE("Size"));
@@ -2519,15 +2530,18 @@ FindPanel::AddAttributeControls(int32 gridRow)
 
        message = new BMessage(kAttributeItem);
        message->AddInt32("operator", B_GE);
-       submenu->AddItem(new BMenuItem(B_TRANSLATE("greater than"), message));
+       submenu->AddItem(new BMenuItem(B_TRANSLATE_NOCOLLECT(operatorLabels[5]),
+               message));
 
        message = new BMessage(kAttributeItem);
        message->AddInt32("operator", B_LE);
-       submenu->AddItem(new BMenuItem(B_TRANSLATE("less than"), message));
+       submenu->AddItem(new BMenuItem(B_TRANSLATE_NOCOLLECT(operatorLabels[6]),
+               message));
 
        message = new BMessage(kAttributeItem);
        message->AddInt32("operator", B_EQ);
-       submenu->AddItem(new BMenuItem(B_TRANSLATE("is"), message));
+       submenu->AddItem(new BMenuItem(B_TRANSLATE_NOCOLLECT(operatorLabels[1]),
+               message));
 
        // add "modified" field
        submenu = new BMenu(B_TRANSLATE("Modified"));
@@ -2541,16 +2555,24 @@ FindPanel::AddAttributeControls(int32 gridRow)
 
        message = new BMessage(kAttributeItem);
        message->AddInt32("operator", B_LE);
-       submenu->AddItem(new BMenuItem(B_TRANSLATE("before"), message));
+       submenu->AddItem(new BMenuItem(B_TRANSLATE_NOCOLLECT(operatorLabels[7]),
+               message));
 
        message = new BMessage(kAttributeItem);
        message->AddInt32("operator", B_GE);
-       submenu->AddItem(new BMenuItem(B_TRANSLATE("after"), message));
+       submenu->AddItem(new BMenuItem(B_TRANSLATE_NOCOLLECT(operatorLabels[8]),
+               message));
 
        BMenuField* menuField = new BMenuField("MenuField", "", menu);
        menuField->SetDivider(0.0f);
        fAttrGrid->AddView(menuField, 0, gridRow);
 
+       BStringView* stringView = new BStringView("",
+               menu->FindMarked()->Submenu()->FindMarked()->Label());
+       BLayoutItem* layoutItem = fAttrGrid->AddView(stringView, 1, gridRow);
+       layoutItem->SetExplicitAlignment(BAlignment(B_ALIGN_RIGHT,
+               B_ALIGN_VERTICAL_UNSET));
+
        BString title("TextEntry");
        title << gridRow;
        BTextControl* textControl = new BTextControl(title.String(), "", "", 
NULL);
@@ -2737,29 +2759,25 @@ FindPanel::AddAttributes(BMenu* menu, const BMimeType 
&mimeType)
                        case B_STRING_TYPE:
                                message = new BMessage(kAttributeItem);
                                message->AddInt32("operator", B_CONTAINS);
-                               submenu->AddItem(new 
BMenuItem(B_TRANSLATE("contains"),
-                                       message));
+                               submenu->AddItem(new 
BMenuItem(operatorLabels[0], message));
 
                                message = new BMessage(kAttributeItem);
                                message->AddInt32("operator", B_EQ);
-                               submenu->AddItem(new 
BMenuItem(B_TRANSLATE("is"), message));
+                               submenu->AddItem(new 
BMenuItem(operatorLabels[1], message));
 
                                message = new BMessage(kAttributeItem);
                                message->AddInt32("operator", B_NE);
-                               submenu->AddItem(new BMenuItem(B_TRANSLATE("is 
not"),
-                                       message));
+                               submenu->AddItem(new 
BMenuItem(operatorLabels[2], message));
                                submenu->SetTargetForItems(this);
 
                                message = new BMessage(kAttributeItem);
                                message->AddInt32("operator", B_BEGINS_WITH);
-                               submenu->AddItem(new 
BMenuItem(B_TRANSLATE("starts with"),
-                                       message));
+                               submenu->AddItem(new 
BMenuItem(operatorLabels[3], message));
                                submenu->SetTargetForItems(this);
 
                                message = new BMessage(kAttributeItem);
                                message->AddInt32("operator", B_ENDS_WITH);
-                               submenu->AddItem(new 
BMenuItem(B_TRANSLATE("ends with"),
-                                       message));
+                               submenu->AddItem(new 
BMenuItem(operatorLabels[4], message));
                                break;
 
                        case B_BOOL_TYPE:
@@ -2776,27 +2794,25 @@ FindPanel::AddAttributes(BMenu* menu, const BMimeType 
&mimeType)
                        case B_DOUBLE_TYPE:
                                message = new BMessage(kAttributeItem);
                                message->AddInt32("operator", B_EQ);
-                               submenu->AddItem(new 
BMenuItem(B_TRANSLATE("is"), message));
+                               submenu->AddItem(new 
BMenuItem(operatorLabels[1], message));
 
                                message = new BMessage(kAttributeItem);
                                message->AddInt32("operator", B_GE);
-                               submenu->AddItem(new 
BMenuItem(B_TRANSLATE("greater than"),
-                                       message));
+                               submenu->AddItem(new 
BMenuItem(operatorLabels[5], message));
 
                                message = new BMessage(kAttributeItem);
                                message->AddInt32("operator", B_LE);
-                               submenu->AddItem(new 
BMenuItem(B_TRANSLATE("less than"),
-                                       message));
+                               submenu->AddItem(new 
BMenuItem(operatorLabels[6], message));
                                break;
 
                        case B_TIME_TYPE:
                                message = new BMessage(kAttributeItem);
                                message->AddInt32("operator", B_LE);
-                               submenu->AddItem(new 
BMenuItem(B_TRANSLATE("before"), message));
+                               submenu->AddItem(new 
BMenuItem(operatorLabels[7], message));
 
                                message = new BMessage(kAttributeItem);
                                message->AddInt32("operator", B_GE);
-                               submenu->AddItem(new 
BMenuItem(B_TRANSLATE("after"), message));
+                               submenu->AddItem(new 
BMenuItem(operatorLabels[8], message));
                                break;
                }
                submenu->SetTargetForItems(this);

############################################################################

Commit:      2db4f1832a951bdd37d0e3d1b4ab05c839d10eb4
URL:         http://cgit.haiku-os.org/haiku/commit/?id=2db4f18
Author:      John Scipione <jscipione@xxxxxxxxx>
Date:        Mon Apr 29 03:44:09 2013 UTC

Make logic menu field more font dynamic, wasn't working for Japanese

Some style fixes and code simplications too.

----------------------------------------------------------------------------

diff --git a/src/kits/tracker/FindPanel.cpp b/src/kits/tracker/FindPanel.cpp
index f0cc2c1..e9a9369 100644
--- a/src/kits/tracker/FindPanel.cpp
+++ b/src/kits/tracker/FindPanel.cpp
@@ -933,46 +933,43 @@ FindPanel::ResizeMenuField(BMenuField* menuField)
 
        BMenu* menu = menuField->Menu();
 
-       float padding = 0.0;
-       float width = size.width;
+       float padding = 0.0f;
+       float width = 0.0f;
 
        BMenuItem* markedItem = menu->FindMarked();
        if (markedItem != NULL) {
                if (markedItem->Submenu() != NULL) {
                        BMenuItem* markedSubItem = 
markedItem->Submenu()->FindMarked();
                        if (markedSubItem != NULL && markedSubItem->Label() != 
NULL) {
-                               float labelWidth = 
StringWidth(markedSubItem->Label());
+                               float labelWidth
+                                       = 
menuField->StringWidth(markedSubItem->Label());
                                padding = size.width - labelWidth;
                        }
                } else if (markedItem->Label() != NULL) {
-                       float labelWidth = StringWidth(markedItem->Label());
+                       float labelWidth = 
menuField->StringWidth(markedItem->Label());
                        padding = size.width - labelWidth;
                }
        }
 
        for (int32 index = menu->CountItems(); index-- > 0; ) {
                BMenuItem* item = menu->ItemAt(index);
-               if (item->Label() != NULL) {
-                       float labelWidth = StringWidth(item->Label());
-                       if (labelWidth > width) {
-                               width = labelWidth;
-                       }
-               }
+               if (item->Label() != NULL)
+                       width = max(width, StringWidth(item->Label()));
+
                BMenu* submenu = item->Submenu();
                if (submenu != NULL) {
                        for (int32 subIndex = submenu->CountItems(); subIndex-- 
> 0; ) {
                                BMenuItem* subItem = submenu->ItemAt(subIndex);
-                               if (subItem->Label() != NULL) {
-                                       float labelWidth = 
StringWidth(subItem->Label());
-                                       if (labelWidth > width)
-                                               width = labelWidth;
-                               }
+                               if (subItem->Label() == NULL)
+                                       continue;
+
+                               width = max(width, 
menuField->StringWidth(subItem->Label()));
                        }
                }
        }
 
        size.width = width + padding;
-       menuField->SetExplicitMinSize(size);
+       menuField->SetExplicitSize(size);
 }
 
 static void
@@ -2696,7 +2693,7 @@ FindPanel::AddLogicMenu(int32 index, bool selectAnd)
        BMenuField* menufield = new BMenuField("Logic", "", menu, B_WILL_DRAW);
        menufield->SetDivider(0.0f);
 
-       menufield->SetExplicitMaxSize(menufield->MinSize());
+       ResizeMenuField(menufield);
 
        fAttrGrid->AddView(menufield, 3, index);
 }

############################################################################

Revision:    hrev45583
Commit:      f542c5137df69a6f17e454e4537e4c858a364774
URL:         http://cgit.haiku-os.org/haiku/commit/?id=f542c51
Author:      John Scipione <jscipione@xxxxxxxxx>
Date:        Mon Apr 29 03:49:27 2013 UTC

Fix bug involving the condition string being removed when it shouldn't

This bug occured when you selected from the mime type menu field while in
attribute mode. The rows are removed and added again but the condition string
view was left out because the menu item wasn't marked yet. Reordered to remove
row, then set marked, then add row checking if marked and adding the condition
string view based on the marked mime type. If no mime types are set it uses the
first mimetype instead which is what we want in that case.

----------------------------------------------------------------------------

diff --git a/src/kits/tracker/FindPanel.cpp b/src/kits/tracker/FindPanel.cpp
index e9a9369..659a5fb 100644
--- a/src/kits/tracker/FindPanel.cpp
+++ b/src/kits/tracker/FindPanel.cpp
@@ -1033,27 +1033,26 @@ FindPanel::Draw(BRect)
                return;
 
        for (int32 index = 0; index < fAttrGrid->CountRows(); index++) {
-
                BMenuField* menuField
                        = dynamic_cast<BMenuField*>(FindAttrView("MenuField", 
index));
                if (menuField == NULL)
-                       return;
+                       continue;
 
+               BLayoutItem* stringView = fAttrGrid->ItemAt(1, index);
                BMenuItem* item = menuField->Menu()->FindMarked();
-               if (item == NULL)
-                       return;
-
-               if (item->Submenu()->FindMarked()) {
-                       BLayoutItem* stringView = fAttrGrid->ItemAt(1, index);
-                       if (stringView == NULL)
-                               stringView = fAttrGrid->AddView(new 
BStringView("",
-                                       
item->Submenu()->FindMarked()->Label()), 1, index);
-                       else
-                               
dynamic_cast<BStringView*>(stringView->View())->SetText(
-                                       item->Submenu()->FindMarked()->Label());
+               if (item == NULL || item->Submenu() == NULL
+                       || item->Submenu()->FindMarked() == NULL) {
+                       continue;
+               }
 
+               if (stringView == NULL) {
+                       stringView = fAttrGrid->AddView(new BStringView("",
+                               item->Submenu()->FindMarked()->Label()), 1, 
index);
                        
stringView->SetExplicitAlignment(BAlignment(B_ALIGN_RIGHT,
                                B_ALIGN_VERTICAL_UNSET));
+               } else {
+                       dynamic_cast<BStringView*>(stringView->View())->SetText(
+                               item->Submenu()->FindMarked()->Label());
                }
        }
 }
@@ -1128,6 +1127,11 @@ FindPanel::MessageReceived(BMessage* message)
 
                case kMIMETypeItem:
                {
+                       if (fMode == kByAttributeItem) {
+                               // the attributes for this type may be different
+                               RemoveAttrViewItems(false);
+                       }
+
                        BMenuItem* item;
                        if (message->FindPointer("source", (void**)&item) == 
B_OK) {
                                // don't add the "All files and folders" to the 
list
@@ -1137,15 +1141,9 @@ FindPanel::MessageReceived(BMessage* message)
                                SetCurrentMimeType(item);
                        }
 
-                       // mime type switched
-                       if (fMode != kByAttributeItem)
-                               break;
-
-                       // the attributes for this type may be different,
-                       // rip out the existing ones
-                       RemoveAttrViewItems(false);
+                       if (fMode == kByAttributeItem)
+                               AddAttrRow();
 
-                       AddAttrRow();
                        break;
                }
 


Other related posts: