Exemple #1
0
status_t
ThemeManager::SaveSettings()
{
	FENTRY;
	BMessage addonSettings;
	int32 i;
	ThemesAddon *ta;
	BPath path;
	BFile sFile;
	status_t err;
	
	/* ask addons for their prefs */
	for (i = 0; i < fAddonCount; i++) {
		ta = AddonAt(i);
		if (!ta)
			continue;
		addonSettings.MakeEmpty();
		if (ta->SaveSettings(addonSettings) == B_OK)
			fSettings.AddMessage(ta->Name(), &addonSettings);
	}
	
	/* save the prefs */
	err = find_directory(B_USER_SETTINGS_DIRECTORY, &path);
	if (err)	return err;
	
	path.Append(Z_THEME_MANAGER_SETTINGS_FILE);
	err = sFile.SetTo(path.Path(), B_WRITE_ONLY|B_CREATE_FILE);
	if (err)	return err;
	
	err = fSettings.Flatten(&sFile);
	if (err)	return err;

	return B_OK;
}
int32 ArpAddonManager::CreateAddonMenu(BMenu* inmenu, BMessage* tmpl) const
{
	if( !inmenu ) return -1;
	
	BAutolock(Lock());
	int32 num=0;
	for( int i=0; i<CountAddons(); i++ ) {
		const ArpAddonManager::BasicAddon* addon = AddonAt(i);
		if( addon && addon->LongName() ) {
			BMessage* msg = NULL;
			if( tmpl ) {
				msg = new BMessage(*tmpl);
				if( msg ) {
					const char* pname = addon->Name();
					if( pname ) msg->AddString("addonname",pname);
					pname = addon->Path().Path();
					if( pname ) msg->AddString("addonfile",pname);
				}
			}
			BMenuItem *item = new BMenuItem(addon->LongName(),msg);
			if( item ) {
				inmenu->AddItem(item);
				num++;
			} else delete msg;
		}
	}
	
	return num;
}
Exemple #3
0
void
ThemeManager::SetAddonFlags(int32 addon, uint32 flags)
{
	FENTRY;
	ThemesAddon *ta;
	ta = AddonAt(addon);
	if (ta)
		ta->SetAddonFlags(flags);
}
Exemple #4
0
uint32
ThemeManager::AddonFlags(int32 addon)
{
	FENTRY;
	ThemesAddon *ta;
	ta = AddonAt(addon);
	if (ta)
		return ta->AddonFlags();
	return 0L;
}
Exemple #5
0
status_t
ThemeManager::RunPreferencesPanel(int32 addon)
{
	FENTRY;
	ThemesAddon *ta;
	ta = AddonAt(addon);
	if (ta)
		return ta->RunPreferencesPanel();
	return B_OK;
}
Exemple #6
0
BView *
ThemeManager::OptionsView(int32 addon)
{
	FENTRY;
	ThemesAddon *ta;
	ta = AddonAt(addon);
	if (ta)
		return ta->OptionsView();
	return NULL;
}
ArpAddonManager::BasicAddon* ArpAddonManager::FindAddon(const char* name) const
{
	BAutolock(Lock());
	//int32 num=0;
	for( int i=0; i<CountAddons(); i++ ) {
		ArpAddonManager::BasicAddon* addon = AddonAt(i);
		if( addon ) {
			const char* pname = addon->Name();
			if( pname && strcmp(pname, name) == 0 ) return addon;
		}
	}
	return NULL;
}
Exemple #8
0
status_t
ThemeManager::LoadSettings()
{
	FENTRY;
	BMessage addonSettings;
	int32 i;
	ThemesAddon *ta;
	uint32 addonFlags;
	BPath path;
	BFile sFile;
	status_t err;
	
	/* load prefs */
	err = find_directory(B_USER_SETTINGS_DIRECTORY, &path);
	if (!err) {
		path.Append(Z_THEME_MANAGER_SETTINGS_FILE);
		err = sFile.SetTo(path.Path(), B_READ_ONLY);
		if (!err) {
			err = fSettings.Unflatten(&sFile);
		}
	}
	
	/* tell addons */
	for (i = 0; i < fAddonCount; i++) {
		ta = AddonAt(i);
		if (!ta || !ta->Name())
			continue;
		if (fSettings.FindMessage(ta->Name(), &addonSettings) < B_OK) {
			addonSettings.MakeEmpty();
		}
		fSettings.RemoveName(ta->Name());
		if (addonSettings.FindInt32("ta:flags", (int32 *)&addonFlags) < B_OK) {
			addonFlags = Z_THEME_ADDON_DO_SET_ALL | Z_THEME_ADDON_DO_RETRIEVE;
			addonSettings.AddInt32("ta:flags", addonFlags);
		}
		ta->LoadSettings(addonSettings);
	}
	return B_OK;
}
Exemple #9
0
status_t
ThemeManager::LoadAddons()
{
	FENTRY;
	ThemesAddon *ta;
	BPath path;
	BDirectory dir;
	entry_ref ref;
#ifndef SINGLE_BINARY
	uint32 addonFlags;
	int dirwhich;
	int32 i;
	status_t err;
	image_id img;
	ThemesAddon *(*instantiate_func)();
#endif
	
#ifndef SINGLE_BINARY
	for (dirwhich = 0; dirwhich < 2; dirwhich++) {
		if (!dirwhich)	/* find system settings dir */
			err = find_directory(B_BEOS_ADDONS_DIRECTORY, &path);
		else			/* find user settings dir */
			err = find_directory(B_USER_ADDONS_DIRECTORY, &path);
		if (err)	return err;
		
		path.Append(Z_THEMES_ADDON_FOLDER);
		
		err = dir.SetTo(path.Path());
		if (err)	continue;
		
		err = dir.Rewind();
		if (err)	continue;
		
		while ((err = dir.GetNextRef(&ref)) == B_OK) {
			bool screwed = false;
			BPath imgpath(&ref);
			BString p(Z_THEMES_ADDON_FOLDER);
			p << "/" << ref.name;
			PRINT(("ThemeManager: trying to load_add_on(%s)\n", p.String()));
			img = load_add_on(imgpath.Path());
			if (img < B_OK)
				fprintf(stderr, "ThemeManager: load_add_on 0x%08lx\n", img);
			if (img < B_OK)
				continue;
			err = get_image_symbol(img, "instantiate_themes_addon", 
							B_SYMBOL_TYPE_TEXT, (void **)&instantiate_func);
			if (err)
				fprintf(stderr, "ThemeManager: get_image_symbol 0x%08lx\n", err);
			if (err)	continue;
			ta = instantiate_func();
			if (!ta)
				fprintf(stderr, "ThemeManager: instantiate_themes_addon returned NULL\n");
			if (!ta)
				continue;
			ta->SetImageId(img);
			/* check for existing names */
			for (i = 0; i < fAddonList.CountItems(); i++) {
				ThemesAddon *a = AddonAt(i);
				if (!a)
					fprintf(stderr, "ThemeManager: screwed! addon@%ld null\n", i);
				if (a->MessageName() && ta->MessageName() && 
							!strcmp(a->MessageName(), ta->MessageName())) {
					fprintf(stderr, "ThemeManager: screwed! addon@%ld has same msgname\n", i);
					screwed = true;
					break;
				}
				if (a->Name() && ta->Name() && 
							!strcmp(a->Name(), ta->Name())) {
					fprintf(stderr, "ThemeManager: screwed! addon@%ld has same name\n", i);
					screwed = true;
					break;
				}
			}
			if (screwed)
				continue;
			/* add it to the list */
			fAddonList.AddItem((void *)ta);
			PRINT(("ThemeManager: Added addon %ld '%s', msgname '%s'\n", ta->ImageId(), ta->Name(), ta->MessageName()));
		}
		//if (err)	return err;
	}
#else

#define ADDA(a) \
	if (ta) { \
		fAddonList.AddItem((void *)ta); \
		PRINT(("ThemeManager: Added addon %ld '%s', msgname '%s'\n", ta->ImageId(), ta->Name(), ta->MessageName())); \
	}


	ta = instantiate_themes_addon_backgrounds();
	ADDA(ta);
	ta = instantiate_themes_addon_beide();
	ADDA(ta);
	ta = instantiate_themes_addon_deskbar();
	ADDA(ta);
#ifndef ZETA_ADDONS
	ta = instantiate_themes_addon_eddie();
	ADDA(ta);
#endif
	ta = instantiate_themes_addon_pe();
	ADDA(ta);
	ta = instantiate_themes_addon_screensaver();
	ADDA(ta);
#ifndef ZETA_ADDONS
	ta = instantiate_themes_addon_soundplay();
	ADDA(ta);
#endif
	ta = instantiate_themes_addon_sounds();
	ADDA(ta);
	ta = instantiate_themes_addon_terminal();
	ADDA(ta);
#if defined(__ANTARES__) || defined(B_BEOS_VERSION_DANO)
	ta = instantiate_themes_addon_ui_settings();
	ADDA(ta);
#endif
#ifndef ZETA_ADDONS
	ta = instantiate_themes_addon_winamp_skin();
	ADDA(ta);
#endif
	ta = instantiate_themes_addon_window_decor();
	ADDA(ta);
#endif
	//if (err)	return err;
	fAddonCount = fAddonList.CountItems();
	PRINT(("ThemeManager: %ld addons loaded\n", fAddonCount));
	return B_OK;
}