Fixed memory leaks. Thanks Stephan and Rene! Added naive sorting of the list of available languages, meant to be replaced.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34066 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jonas Sundström
2009-11-15 22:11:50 +00:00
parent eaf37e54bf
commit 2e71609917
2 changed files with 37 additions and 9 deletions
+35 -9
View File
@@ -54,13 +54,26 @@ class LanguageListItem: public BStringItem
};
static int
compare_list_items(const void* _a, const void* _b)
{
LanguageListItem* a = *(LanguageListItem**)_a;
LanguageListItem* b = *(LanguageListItem**)_b;
return strcasecmp(a->Text(), b->Text());
}
class LanguageListView: public BListView
{
public:
LanguageListView(const char* name, list_view_type type)
: BListView(name, type)
:
BListView(name, type),
fMsgPrefLanguagesChanged(new BMessage(kMsgPrefLanguagesChanged))
{}
~LanguageListView() { delete fMsgPrefLanguagesChanged; }
bool InitiateDrag(BPoint point, int32 index, bool wasSelected);
void MouseMoved(BPoint where, uint32 transit, const BMessage* msg);
void MoveItems(BList& items, int32 index);
@@ -107,11 +120,12 @@ class LanguageListView: public BListView
fDropIndex = -1;
}
}
Invoke(new BMessage(kMsgPrefLanguagesChanged));
Invoke(fMsgPrefLanguagesChanged);
} else BListView::MessageReceived(message);
}
private:
int32 fDropIndex;
int32 fDropIndex;
BMessage* fMsgPrefLanguagesChanged;
};
@@ -299,7 +313,8 @@ LocaleWindow::LocaleWindow()
:
BWindow(BRect(0, 0, 0, 0), "Locale", B_TITLED_WINDOW, B_NOT_RESIZABLE
| B_NOT_ZOOMABLE | B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS
| B_QUIT_ON_WINDOW_CLOSE)
| B_QUIT_ON_WINDOW_CLOSE),
fMsgPrefLanguagesChanged(new BMessage(kMsgPrefLanguagesChanged))
{
BCountry* defaultCountry;
be_locale_roster->GetDefaultCountry(&defaultCountry);
@@ -347,6 +362,9 @@ LocaleWindow::LocaleWindow()
fLanguageListView->AddItem(si);
}
fLanguageListView->SortItems(compare_list_items);
// see previous comment on sort using collators
} else {
BAlert* myAlert = new BAlert("Error",
TR("Unable to find the available languages! You can't use this "
@@ -461,6 +479,12 @@ LocaleWindow::LocaleWindow()
}
LocaleWindow::~LocaleWindow()
{
delete fMsgPrefLanguagesChanged;
}
void
LocaleWindow::MessageReceived(BMessage* message)
{
@@ -496,9 +520,9 @@ LocaleWindow::MessageReceived(BMessage* message)
BListView* countryList = static_cast<BListView*>(ptr);
LanguageListItem* lli = static_cast<LanguageListItem*>
(countryList->ItemAt(countryList->CurrentSelection()));
BMessage* newMessage = new BMessage(kMsgSettingsChanged);
newMessage->AddString("country",lli->LanguageCode());
be_app_messenger.SendMessage(newMessage);
BMessage newMessage(kMsgSettingsChanged);
newMessage.AddString("country",lli->LanguageCode());
be_app_messenger.SendMessage(&newMessage);
BCountry* country = new BCountry(lli->LanguageCode());
fFormatView->SetCountry(country);
@@ -514,7 +538,7 @@ LocaleWindow::MessageReceived(BMessage* message)
(fLanguageListView->RemoveItem(index));
fPreferredListView->AddItem(listItem);
fPreferredListView
->Invoke(new BMessage(kMsgPrefLanguagesChanged));
->Invoke(fMsgPrefLanguagesChanged);
}
break;
}
@@ -530,8 +554,10 @@ LocaleWindow::MessageReceived(BMessage* message)
= static_cast<LanguageListItem*>
(fPreferredListView->RemoveItem(index));
fLanguageListView->AddItem(listItem);
fLanguageListView->SortItems(compare_list_items);
// see previous comment on sort using collators
fPreferredListView
->Invoke(new BMessage(kMsgPrefLanguagesChanged));
->Invoke(fMsgPrefLanguagesChanged);
}
break;
}
+2
View File
@@ -16,6 +16,7 @@ class FormatView;
class LocaleWindow : public BWindow {
public:
LocaleWindow();
~LocaleWindow();
virtual void MessageReceived(BMessage* message);
virtual void FrameMoved(BPoint newPosition);
@@ -25,6 +26,7 @@ private:
BListView* fLanguageListView;
BListView* fPreferredListView;
FormatView* fFormatView;
BMessage* fMsgPrefLanguagesChanged;
};
#endif // LOCALE_WINDOW_H