void ZLApplicationWindow::refreshToolbar() {
	const ZLToolbar::ItemVector &items = application().toolbar().items();
	bool canAddSeparator = false;
	ZLToolbar::ItemPtr lastSeparator = 0;
	for (ZLToolbar::ItemVector::const_iterator it = items.begin(); it != items.end(); ++it) {
		if ((*it)->isSeparator()) {
			if (canAddSeparator) {
				lastSeparator = *it;
				canAddSeparator = false;
			} else {
				setToolbarItemState(*it, false, true);
			}
		} else {
			ZLToolbar::ButtonItem &button = (ZLToolbar::ButtonItem&)**it;
			const std::string &id = button.actionId();

			const bool visible = application().isActionVisible(id);
			const bool enabled = application().isActionEnabled(id);

			if (visible) {
				if (!lastSeparator.isNull()) {
					setToolbarItemState(lastSeparator, true, true);
					lastSeparator = 0;
				}
				canAddSeparator = true;
			}
			setToolbarItemState(*it, visible, enabled);
		}
	}
	if (!lastSeparator.isNull()) {
		setToolbarItemState(lastSeparator, false, true);
	}
}
void ZLApplicationWindow::refreshToolbar(ToolbarType type) {
	const ZLToolbar::ItemVector &items = application().toolbar(type).items();
	bool canAddSeparator = false;
	ZLToolbar::ItemPtr lastSeparator = 0;
	for (ZLToolbar::ItemVector::const_iterator it = items.begin(); it != items.end(); ++it) {
		switch ((*it)->type()) {
			case ZLToolbar::Item::TEXT_FIELD:
			case ZLToolbar::Item::COMBO_BOX:
			case ZLToolbar::Item::SEARCH_FIELD:
			case ZLToolbar::Item::PLAIN_BUTTON:
			case ZLToolbar::Item::MENU_BUTTON:
				{
					ZLToolbar::ActionItem &button = (ZLToolbar::ActionItem&)**it;
					const std::string &id = button.actionId();
        
					const bool visible = application().isActionVisible(id);
					const bool enabled = application().isActionEnabled(id);
        
					if (visible) {
						if (!lastSeparator.isNull()) {
							setToolbarItemState(lastSeparator, true, true);
							lastSeparator = 0;
						}
						canAddSeparator = true;
					}
					setToolbarItemState(*it, visible, enabled);
				}
				break;
			case ZLToolbar::Item::TOGGLE_BUTTON:
				{
					ZLToolbar::ToggleButtonItem &button = (ZLToolbar::ToggleButtonItem&)**it;
					const std::string &id = button.actionId();
        
					const bool visible = application().isActionVisible(id);
					const bool enabled = application().isActionEnabled(id);
        
					if (visible) {
						if (!lastSeparator.isNull()) {
							setToolbarItemState(lastSeparator, true, true);
							lastSeparator = 0;
						}
						canAddSeparator = true;
					}
					/*
					if (!enabled && button.isPressed()) {
						button.buttonGroup().press(0);
						//application().doAction(group->UnselectAllButtonsActionId);
						myToggleButtonLock = true;
						setToggleButtonState(button);
						myToggleButtonLock = false;
					}
					*/
					setToolbarItemState(*it, visible, enabled);
					setToggleButtonState(button);
				}
				break;
			case ZLToolbar::Item::SEPARATOR:
				if (canAddSeparator) {
					lastSeparator = *it;
					canAddSeparator = false;
				} else {
					setToolbarItemState(*it, false, true);
				}
				break;
			case ZLToolbar::Item::FILL_SEPARATOR:
				if (canAddSeparator) {
					lastSeparator = *it;
					canAddSeparator = false;
				} else if (lastSeparator != 0) {
					setToolbarItemState(lastSeparator, false, true);
					lastSeparator = *it;
				} else {
					setToolbarItemState(*it, false, true);
				}
				break;
		}
	}
	if (!lastSeparator.isNull()) {
		setToolbarItemState(lastSeparator, false, true);
	}
}