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
|
class LanguageListView: public BListView
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LanguageListView(const char* name, list_view_type type)
|
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);
|
bool InitiateDrag(BPoint point, int32 index, bool wasSelected);
|
||||||
void MouseMoved(BPoint where, uint32 transit, const BMessage* msg);
|
void MouseMoved(BPoint where, uint32 transit, const BMessage* msg);
|
||||||
void MoveItems(BList& items, int32 index);
|
void MoveItems(BList& items, int32 index);
|
||||||
@@ -107,11 +120,12 @@ class LanguageListView: public BListView
|
|||||||
fDropIndex = -1;
|
fDropIndex = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Invoke(new BMessage(kMsgPrefLanguagesChanged));
|
Invoke(fMsgPrefLanguagesChanged);
|
||||||
} else BListView::MessageReceived(message);
|
} else BListView::MessageReceived(message);
|
||||||
}
|
}
|
||||||
private:
|
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
|
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_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;
|
BCountry* defaultCountry;
|
||||||
be_locale_roster->GetDefaultCountry(&defaultCountry);
|
be_locale_roster->GetDefaultCountry(&defaultCountry);
|
||||||
@@ -347,6 +362,9 @@ LocaleWindow::LocaleWindow()
|
|||||||
fLanguageListView->AddItem(si);
|
fLanguageListView->AddItem(si);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fLanguageListView->SortItems(compare_list_items);
|
||||||
|
// see previous comment on sort using collators
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
BAlert* myAlert = new BAlert("Error",
|
BAlert* myAlert = new BAlert("Error",
|
||||||
TR("Unable to find the available languages! You can't use this "
|
TR("Unable to find the available languages! You can't use this "
|
||||||
@@ -461,6 +479,12 @@ LocaleWindow::LocaleWindow()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
LocaleWindow::~LocaleWindow()
|
||||||
|
{
|
||||||
|
delete fMsgPrefLanguagesChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
LocaleWindow::MessageReceived(BMessage* message)
|
LocaleWindow::MessageReceived(BMessage* message)
|
||||||
{
|
{
|
||||||
@@ -496,9 +520,9 @@ LocaleWindow::MessageReceived(BMessage* message)
|
|||||||
BListView* countryList = static_cast<BListView*>(ptr);
|
BListView* countryList = static_cast<BListView*>(ptr);
|
||||||
LanguageListItem* lli = static_cast<LanguageListItem*>
|
LanguageListItem* lli = static_cast<LanguageListItem*>
|
||||||
(countryList->ItemAt(countryList->CurrentSelection()));
|
(countryList->ItemAt(countryList->CurrentSelection()));
|
||||||
BMessage* newMessage = new BMessage(kMsgSettingsChanged);
|
BMessage newMessage(kMsgSettingsChanged);
|
||||||
newMessage->AddString("country",lli->LanguageCode());
|
newMessage.AddString("country",lli->LanguageCode());
|
||||||
be_app_messenger.SendMessage(newMessage);
|
be_app_messenger.SendMessage(&newMessage);
|
||||||
|
|
||||||
BCountry* country = new BCountry(lli->LanguageCode());
|
BCountry* country = new BCountry(lli->LanguageCode());
|
||||||
fFormatView->SetCountry(country);
|
fFormatView->SetCountry(country);
|
||||||
@@ -514,7 +538,7 @@ LocaleWindow::MessageReceived(BMessage* message)
|
|||||||
(fLanguageListView->RemoveItem(index));
|
(fLanguageListView->RemoveItem(index));
|
||||||
fPreferredListView->AddItem(listItem);
|
fPreferredListView->AddItem(listItem);
|
||||||
fPreferredListView
|
fPreferredListView
|
||||||
->Invoke(new BMessage(kMsgPrefLanguagesChanged));
|
->Invoke(fMsgPrefLanguagesChanged);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -530,8 +554,10 @@ LocaleWindow::MessageReceived(BMessage* message)
|
|||||||
= static_cast<LanguageListItem*>
|
= static_cast<LanguageListItem*>
|
||||||
(fPreferredListView->RemoveItem(index));
|
(fPreferredListView->RemoveItem(index));
|
||||||
fLanguageListView->AddItem(listItem);
|
fLanguageListView->AddItem(listItem);
|
||||||
|
fLanguageListView->SortItems(compare_list_items);
|
||||||
|
// see previous comment on sort using collators
|
||||||
fPreferredListView
|
fPreferredListView
|
||||||
->Invoke(new BMessage(kMsgPrefLanguagesChanged));
|
->Invoke(fMsgPrefLanguagesChanged);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ class FormatView;
|
|||||||
class LocaleWindow : public BWindow {
|
class LocaleWindow : public BWindow {
|
||||||
public:
|
public:
|
||||||
LocaleWindow();
|
LocaleWindow();
|
||||||
|
~LocaleWindow();
|
||||||
|
|
||||||
virtual void MessageReceived(BMessage* message);
|
virtual void MessageReceived(BMessage* message);
|
||||||
virtual void FrameMoved(BPoint newPosition);
|
virtual void FrameMoved(BPoint newPosition);
|
||||||
@@ -25,6 +26,7 @@ private:
|
|||||||
BListView* fLanguageListView;
|
BListView* fLanguageListView;
|
||||||
BListView* fPreferredListView;
|
BListView* fPreferredListView;
|
||||||
FormatView* fFormatView;
|
FormatView* fFormatView;
|
||||||
|
BMessage* fMsgPrefLanguagesChanged;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // LOCALE_WINDOW_H
|
#endif // LOCALE_WINDOW_H
|
||||||
|
|||||||
Reference in New Issue
Block a user