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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user