LLFloaterMessageLog::~LLFloaterMessageLog()
{
	LLMessageLog::setCallback(NULL);
	stopApplyingFilter();
	sInstance = NULL;
	sNetListItems.clear();
	sMessageLogEntries.clear();
	sFloaterMessageLogItems.clear();
}
void LLFloaterMessageLog::startApplyingFilter(std::string filter, BOOL force)
{
	LLMessageLogFilter new_filter(filter);
	if(force
		|| (new_filter.mNegativeNames != mMessageLogFilter.mNegativeNames)
		|| (new_filter.mPositiveNames != mMessageLogFilter.mPositiveNames))
	{
		stopApplyingFilter();
		mMessageLogFilter = new_filter;

		mMessagesLogged = sMessageLogEntries.size();
		clearFloaterMessageItems();

		childSetVisible("message_log", false);
		mMessageLogFilterApply = new LLMessageLogFilterApply(this);
	}
}
LLFloaterMessageLog::~LLFloaterMessageLog()
{
	stopApplyingFilter();
	clearFloaterMessageItems(true);

	delete mEasyMessageReader;

	sInstance = NULL;

	//prepare for when we might have multiple instances
	if(!sInstance)
	{
		LLMessageLog::setCallback(NULL);

		sNetListTimer->cancel();
		sNetListTimer = NULL;
		clearMessageLogEntries();
	}
}
void LLFloaterMessageLog::startApplyingFilter(std::string filter, BOOL force)
{
	LLMessageLogFilter new_filter = LLMessageLogFilter();
	sMessageLogFilterString = filter;
	new_filter.set(sMessageLogFilterString);
	if(!filter.length() || filter.at(filter.length()-1) != ' ')
		childSetText("filter_edit", filter + " ");
	if(force
		|| (new_filter.mNegativeNames != sMessageLogFilter.mNegativeNames)
		|| (new_filter.mPositiveNames != sMessageLogFilter.mPositiveNames))
	{
		stopApplyingFilter();
		sMessageLogFilter = new_filter;
		sFloaterMessageLogItems.clear();
		getChild<LLScrollListCtrl>("message_log")->clearRows();
		sBusyApplyingFilter = TRUE;
		childSetVisible("message_log", false);
		//childSetVisible("log_status_text", true);
		mMessageLogFilterApply = new LLMessageLogFilterApply();
	}
}