示例#1
0
	LoginLink(wxWindow* parent, wxString text, uint32 style) : StripMenuButton(parent, text)
	{
		wxColor linkColor = (wxColour)GetThemeManager().getColor("formlogin", "link-fg");
		wxColor hoverColor = (wxColour)GetThemeManager().getColor("formlogin", "link-hov-fg");

		Managers::LoadTheme(this, "formlogin");

		SetWindowStyle(style);

		setColors(linkColor, hoverColor);
		showFocusBox(hoverColor);
		init(nullptr);

		Bind(wxEVT_CHAR, &LoginLink::onChar, this);
	}
status_t
ThemeInterfaceView::DeleteSelected()
{
	status_t err;
	ThemeManager* tman = GetThemeManager();
	int32 id;
	ThemeItem *item;
	BMessage theme;
	// find selected theme
	id = fThemeList->CurrentSelection(0);
	if (id < 0)
		return B_OK;
	item = dynamic_cast<ThemeItem *>(fThemeList->ItemAt(id));
	if (!item)
		return AError(__FUNCTION__, ENOENT);
	if (item->IsReadOnly())
		return AError(__FUNCTION__, B_READ_ONLY_DEVICE);
	id = item->ThemeId();
	if (id < 0)
		return AError(__FUNCTION__, ENOENT);
	// then apply
	err = tman->DeleteTheme(id);
	if (err)
		return AError(__FUNCTION__, err);
	fThemeList->RemoveItem(item);
	delete item;
	//err = tman->ApplyTheme(theme);
	return err;
}
status_t
ThemeInterfaceView::AddScreenshot()
{
	status_t err;
	ThemeManager* tman = GetThemeManager();
	int32 id;
	ThemeItem *item;
	BMessage theme;
	// find selected theme
	id = fThemeList->CurrentSelection(0);
	if (id < 0)
		return B_OK;
	item = dynamic_cast<ThemeItem *>(fThemeList->ItemAt(id));
	if (!item)
		return AError(__FUNCTION__, ENOENT);
	id = item->ThemeId();
	if (id < 0)
		return AError(__FUNCTION__, ENOENT);
	// then apply
	err = tman->MakeThemeScreenShot(id);
	if (err)
		return AError(__FUNCTION__, err);
	err = tman->SaveTheme(id);
	if (err)
		return AError(__FUNCTION__, err);
	ThemeSelected(); // force reload of description for selected theme.
	return err;
}
status_t
ThemeInterfaceView::CreateNew(const char *name)
{
	status_t err;
	ThemeManager* tman = GetThemeManager();
	int32 id;
	ThemeItem *ti;
	BString n(name);
	
	id = tman->MakeTheme();
	if (id < 0)
		return B_ERROR;
	err = tman->SetThemeName(id, name);
	if (err)
		return err;
	err = tman->ThemeName(id, n);
	if (err)
		return err;
	err = tman->SaveTheme(id, true);
	if (err)
		return err;
	ti = new ThemeItem(id, n.String(), false);
	fThemeList->AddItem(ti);
	fThemeList->DeselectAll();
	fThemeList->Select(fThemeList->CountItems() - 1);
	fThemeList->ScrollToSelection();
	return B_OK;
}
status_t
ThemeInterfaceView::ApplyDefaults()
{
	status_t err = B_OK;
	ThemeManager* tman = GetThemeManager();
	
	SetIsRevertable();

	err = tman->ApplyDefaultTheme();
	return err;
}
示例#6
0
SearchControl::SearchControl(wxWindow* parent) : gcPanel(parent)
{
	m_szDefaultText = Managers::GetString(L"#SB_DEFAULT");

	m_butFullSearch = new gcImageButton(parent, wxID_ANY, wxDefaultPosition, wxSize( 19,19 ), 0 );
	m_butFullSearch->setDefaultImage(("#search_button"));
	m_butFullSearch->setHoverImage(("#search_button_hover"));
	m_butFullSearch->SetToolTip(Managers::GetString(L"#SB_FULL_SEARCH"));
	m_butFullSearch->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &SearchControl::onButtonClick, this);


	wxPanel* bg = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 17));
	bg->SetBackgroundColour(wxColor(GetGCThemeManager()->getColor("searchBox", "sb-bg")));

	m_tbSearchBox = new wxTextCtrl( bg, wxID_ANY, m_szDefaultText, wxDefaultPosition, wxSize(150, 15), 0|wxBORDER_NONE|wxWANTS_CHARS|wxTE_PROCESS_ENTER );
	m_tbSearchBox->SetForegroundColour(wxColor(GetGCThemeManager()->getColor("searchBox", "sb-fg")));
	m_tbSearchBox->SetBackgroundColour(wxColor(GetGCThemeManager()->getColor("searchBox", "sb-bg")));

	m_tbSearchBox->Bind(wxEVT_KILL_FOCUS, &SearchControl::onBlur, this);
	m_tbSearchBox->Bind(wxEVT_SET_FOCUS, &SearchControl::onFocus, this);
	m_tbSearchBox->Bind(wxEVT_COMMAND_TEXT_UPDATED, &SearchControl::onSearchChanged, this);
	m_tbSearchBox->Bind(wxEVT_COMMAND_TEXT_ENTER, &SearchControl::onDoSearch, this);
	m_tbSearchBox->Bind(wxEVT_KEY_DOWN, &SearchControl::onKeyDown, this);

	wxFlexGridSizer* fgSizer2;
	fgSizer2 = new wxFlexGridSizer( 2, 1, 0, 0 );
	fgSizer2->SetFlexibleDirection( wxBOTH );
	fgSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );

	fgSizer2->Add( 0, 2 );
	fgSizer2->Add( m_tbSearchBox, 0, wxLEFT|wxRIGHT, 2 );

	bg->SetSizer( fgSizer2 );
	bg->Layout();



	wxFlexGridSizer* fgSizer1;
	fgSizer1 = new wxFlexGridSizer( 2, 2, 0, 0 );
	fgSizer1->SetFlexibleDirection( wxBOTH );
	fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
	
	fgSizer1->Add(bg, 0, wxALL, 1);
	
	this->SetSizer( fgSizer1 );
	this->Layout();
	
	Managers::LoadTheme(this, "searchBox");

	m_DefaultCol = wxColor(GetThemeManager()->getColor("formlogin", "tb-default-fg"));
	m_NormalCol = m_tbSearchBox->GetForegroundColour();

	m_tbSearchBox->SetForegroundColour(m_DefaultCol);
}
status_t
ThemeInterfaceView::ThemeSelected()
{
	status_t err;
	ThemeManager* tman = GetThemeManager();
	int32 id;
	ThemeItem *item;
	BString desc;
	BBitmap *sshot = NULL;
	// find selected theme
	id = fThemeList->CurrentSelection(0);
	if (id < 0)
	{
		fScreenshotPane->ClearViewBitmap();
		fScreenshotPane->Invalidate(fScreenshotPane->Bounds());
		
		while(true == fScreenshotText->IsHidden())
			fScreenshotText->Show();
			
		fScreenshotText->SetText(B_TRANSLATE("No theme selected"));
		return ENOENT;
	}
	
	item = dynamic_cast<ThemeItem *>(fThemeList->ItemAt(id));
	if (!item)
		return ENOENT;
	id = item->ThemeId();
	if (id < 0)
		return ENOENT;
	// then apply
	
	err = tman->ThemeScreenShot(id, &sshot);
	if (err)
		sshot = NULL;
	if (sshot == NULL) 
	{
		SetScreenshot(NULL);
		fprintf(stderr, "ThemeManager: no screenshot; error 0x%08lx\n", err);

		while(true == fScreenshotText->IsHidden())
			fScreenshotText->Show();

		fScreenshotText->SetText(B_TRANSLATE("No screenshot"));
		return err;
	}

	SetScreenshot(sshot);
	while(false == fScreenshotText->IsHidden())
			fScreenshotText->Hide();

	//err = tman->ApplyTheme(theme);
	return err;
}
status_t
ThemeInterfaceView::Revert()
{
	status_t err = B_OK;
	ThemeManager* tman = GetThemeManager();
	
	if (tman->CanRevert())
		err = tman->RestoreCurrent();
	if (err)
		return err;
	
	return B_OK;
}
示例#9
0
void LoginForm::onTextChange(wxCommandEvent& event)
{
	gcWString defaultText;
	gcTextCtrl* textCtrl;

	if (event.GetId() == m_tbUsername->GetId())
	{
		textCtrl = m_tbUsername;
		defaultText = Managers::GetString(L"#LF_USER");

		if (gc_saveusername.getBool())
		{
			const char* str = gc_lastusername.getString();
			const char* avatar = gc_lastavatar.getString();

			if (gcString(str) != gcString(m_tbUsername->GetValue().c_str().AsWChar()))
			{
				m_imgAvatar->setImage("#login_default_avatar");
			}
			else
			{
				if (avatar && UTIL::FS::isValidFile(UTIL::FS::PathWithFile(avatar)))
					m_imgAvatar->setImage(avatar);
			}
		}
	}
	else if (event.GetId() == m_tbPasswordDisp->GetId())
	{
		textCtrl = m_tbPasswordDisp;
		defaultText = Managers::GetString(L"#LF_PASS");
	}
	else
	{
		return;
	}

	const char* colorName = "tb-fg";

	if (textCtrl->GetValue() == defaultText)
		colorName = "tb-default-fg";

	wxColor color = wxColor(GetThemeManager().getColor("formlogin", colorName));

	textCtrl->SetForegroundColour(color);
	textCtrl->Refresh();
}
void
ThemeInterfaceView::PopulateAddonList()
{
	int32 i, count;
	ViewItem *vi;
	ThemeManager* tman = GetThemeManager();

	fAddonList->MakeEmpty();

	// global item
	vi = new ThemeAddonItem(BRect(0,0,200,52), this, -1);
	fAddonList->AddItem(vi);

	count = tman->CountAddons();
	for (i = 0; i < count; i++) {
		vi = new ThemeAddonItem(BRect(0,0,200,52), this, i);
		fAddonList->AddItem(vi);
	}
}
status_t
ThemeInterfaceView::ApplySelected()
{
	status_t err;
	ThemeManager* tman = GetThemeManager();
	int32 id;
	ThemeItem *item;
	// find selected theme
	id = fThemeList->CurrentSelection(0);
	if (id < 0)
		return ENOENT;
	item = dynamic_cast<ThemeItem *>(fThemeList->ItemAt(id));
	if (!item)
		return ENOENT;
	id = item->ThemeId();
	if (id < 0)
		return ENOENT;
	SetIsRevertable();
	err = tman->ApplyTheme(id);
	return err;
}
示例#12
0
void gcThemeManager::loadTheme(const char* name)
{
	GetThemeManager().loadTheme(name);
}
示例#13
0
void gcThemeManager::loadFromFolder(const char* folder)
{
	GetThemeManager().loadFromFolder(folder);
}
示例#14
0
SpriteRectI* gcThemeManager::getSpriteRect(const char* id, const char* rectId)
{
	return GetThemeManager().getSpriteRect(id, rectId);
}
示例#15
0
Color gcThemeManager::getColor(const char* name, const char* id)
{
	return GetThemeManager().getColor(name, id);
}
示例#16
0
const char* gcThemeManager::getImage(const char* id)
{
	return GetThemeManager().getImage(id);
}
void
ThemeInterfaceView::_ThemeListPopulator()
{
	status_t err;
	int32 i, count;
	int32 importer;
	BString name;
	ThemeItem *ti;
	bool isro;
	BStringItem *si;

	LockLooper();
	fThemeList->MakeEmpty();
	UnlockLooper();

	ThemeManager* tman = GetThemeManager();
	tman->LoadThemes();

	count = tman->CountThemes();
	

	LockLooper();

	si = new BStringItem("(System themes)");
	si->SetEnabled(false);
	fThemeList->AddItem(si);
	si = NULL; // first non-readonly item will set it again

	// native themes
	for (i = 0; i < count; i++) {
		err = tman->ThemeName(i, name);
		isro = tman->ThemeIsReadOnly(i);
		if (err)
			continue;

		if (!isro && si == NULL) {
			si = new BStringItem("(User themes)");
			si->SetEnabled(false);
			fThemeList->AddItem(si);
		}

		ti = new ThemeItem(i, name.String(), isro);
		fThemeList->AddItem(ti);
	}

	UnlockLooper();

	// for each importer
	for (importer = 0; importer < tman->CountThemeImporters(); importer++) {
		err = tman->ImportThemesFor(importer);
		if (err < 0)
			continue;
		PRINT(("Imports for %s: %d\n", tman->ThemeImporterAt(importer), (tman->CountThemes() - count)));
		if (tman->CountThemes() == count)
			continue; // nothing found

		// separator item
		name = "Imported (";
		name << tman->ThemeImporterAt(importer) << ")";
		si = new BStringItem(name.String());
		si->SetEnabled(false);
		LockLooper();
		fThemeList->AddItem(si);
		UnlockLooper();

		// add new themes
		count = tman->CountThemes();
		// we reuse i from where it was left
		for (; i < count; i++) {
			err = tman->ThemeName(i, name);
			isro = true;// importers can't save themes back
			if (err)
				continue;
			ti = new ThemeItem(i, name.String(), isro);
			LockLooper();
			fThemeList->AddItem(ti);
			UnlockLooper();
			// rest a bit
			snooze(1000);
		}
	}

	// enable controls again
	BControl *c;
	LockLooper();
	for (i = 0; ChildAt(i); i++) {
		c = dynamic_cast<BControl *>(ChildAt(i));
		if (c)
			c->SetEnabled(true);
	}
	UnlockLooper();
}
示例#18
0
void gcThemeManager::getThemeStubList(std::vector<ThemeStubI*> &vList)
{
	GetThemeManager().getThemeStubList(vList);
}
示例#19
0
const char* gcThemeManager::getThemeFolder()
{
	return GetThemeManager().getThemeFolder();
}
void
ThemeInterfaceView::MessageReceived(BMessage *_msg)
{
	ThemeManager *tman;
	int32 value;
	int32 id;

_msg->PrintToStream();

	switch(_msg->what)
	{
		case B_REFS_RECEIVED:
			_msg->PrintToStream();
			break;

		case kMakeScreenshot:
			AddScreenshot();
			break;

		case kThemeSelected:
			ThemeSelected();
			break;

		case kApplyThemeBtn:
			ApplySelected();
			break;

		case kCreateThemeBtn:
		if (fNameText->IsHidden()) {
			float w = fNameText->Bounds().Width() + 10.0;
			fNameText->Show();
			fNameText->MakeFocus();
			fNewBtn->MoveBy(w, 0);
			fSaveBtn->MoveBy(w, 0);
			fDeleteBtn->MoveBy(w, 0);
			break;
		} else {
			float w = fNameText->Bounds().Width() + 10.0;
			fNameText->Hide();
			fNameText->MakeFocus(false);
			fNewBtn->MoveBy(-w, 0);
			fSaveBtn->MoveBy(-w, 0);
			fDeleteBtn->MoveBy(-w, 0);
		}
		/* FALLTHROUGH */

		case kReallyCreateTheme:
			CreateNew(fNameText->Text());
			break;

		case kSaveThemeBtn:
			SaveSelected();
			break;

		case kDeleteThemeBtn:
			DeleteSelected();
			break;
#if 0
		case kColorsChanged:
		case kGeneralChanged:
		case kFontsChanged:
		{
			BMessenger msgr (Parent());
			msgr.SendMessage(B_PREF_APP_ENABLE_REVERT);
			BMessage changes;
			if (_msg->FindMessage("changes", &changes) == B_OK)
			{
				update_ui_settings(changes);
			}
			break;
		}
#endif
		case B_PREF_APP_SET_DEFAULTS:
		{
			ApplyDefaults();
			break;
		}
		
		case B_PREF_APP_REVERT:
		{
			Revert();
			break;
		}
		
		case B_PREF_APP_ADDON_REF:
		{
			break;
		}

		case kThemeChanged:
		{
/*			BMessage data;
			BMessage names;
			get_ui_settings(&data, &names);
			fColorSelector->Update(data);
			fFontSelector->Refresh();
			fGeneralSelector->Refresh(data);
*/
			break;
		}

		case CB_APPLY:
			tman = GetThemeManager();
			_msg->PrintToStream();
			if (_msg->FindInt32("be:value", &value) < B_OK)
				value = false;
			if (_msg->FindInt32("addon", &id) < B_OK)
				break;

			if (id > -1) {
				tman->SetAddonFlags(id, (tman->AddonFlags(id) & ~Z_THEME_ADDON_DO_SET_ALL) | (value?Z_THEME_ADDON_DO_SET_ALL:0));
			} else {
				// apply globally
				int32 i;
				for (i = fAddonList->CountItems() - 1; i > 0; i--) {
					ThemeAddonItem *item = static_cast<ThemeAddonItem *>(fAddonList->ItemAt(i));
					item->ApplyBox()->SetValue(value);
					tman->SetAddonFlags(item->AddonId(), (tman->AddonFlags(item->AddonId()) & ~Z_THEME_ADDON_DO_SET_ALL) | (value?Z_THEME_ADDON_DO_SET_ALL:0));
				}
			}
			break;

		case CB_SAVE:
			tman = GetThemeManager();
			_msg->PrintToStream();
			if (_msg->FindInt32("be:value", &value) < B_OK)
				value = false;
			if (_msg->FindInt32("addon", &id) < B_OK)
				break;

			if (id > -1) {
				tman->SetAddonFlags(id, (tman->AddonFlags(id) & ~Z_THEME_ADDON_DO_RETRIEVE) | (value?Z_THEME_ADDON_DO_RETRIEVE:0));
			} else {
				// apply globally
				int32 i;
				for (i = fAddonList->CountItems() - 1; i > 0; i--) {
					ThemeAddonItem *item = static_cast<ThemeAddonItem *>(fAddonList->ItemAt(i));
					item->SaveBox()->SetValue(value);
					tman->SetAddonFlags(item->AddonId(), (tman->AddonFlags(item->AddonId()) & ~Z_THEME_ADDON_DO_RETRIEVE) | (value?Z_THEME_ADDON_DO_RETRIEVE:0));
				}
			}
			break;

		case BTN_PREFS:
			tman = GetThemeManager();
			if (_msg->FindInt32("addon", &id) < B_OK)
				break;
			tman->RunPreferencesPanel(id);
			break;

		case kHideSSPulse:
			break;
			
		case kShowSSPulse:
			break;
		
		case skOnlineThemes:
		{
			/*
			ZETA code:
			be_roster->Launch( "application/x-vnd.Mozilla-Firefox", 1,
				(char **)&skThemeURL);
			*/
			if (!be_roster->IsRunning(kHaikuDepotSig)) {
				be_roster->Launch(kHaikuDepotSig);
				snooze(1000000);
			}
			BMessenger msgr(kHaikuDepotSig);
			BMessage message(B_SET_PROPERTY);
			message.AddString("data", "_theme");
			message.AddSpecifier("Value");
			message.AddSpecifier("View", "search terms");
			message.AddSpecifier("Window", (int32)0);
			msgr.SendMessage(&message);
			break;
		}
		default:
		{
			BView::MessageReceived(_msg);
			break;
		}
	}
}