Пример #1
0
status_t
WinampSkinThemesAddon::MakeTheme(BMessage &theme, uint32 flags)
{
	BMessage skin;
	BString name;
	status_t err = B_ERROR;
	
	(void)flags;
	err = MyMessage(theme, skin);
	if (err)
		skin.MakeEmpty();

	if (WhichApp() == USE_CL)
		err = CLSkin(&name);
	else
		err = SPSkin(&name);
	/* try the other way round */
	if (err) {
		if (WhichApp() == USE_CL)
			err = CLSkin(&name, true);
		else
			err = SPSkin(&name, true);
	}
	if (!err)
		skin.AddString("winamp:skin", name);
	err = SetMyMessage(theme, skin);
	return err;
}
status_t
UISettingsThemesAddon::MakeTheme(BMessage &theme, uint32 flags)
{
	BMessage uisettings;
	BMessage names;
	BFont fnt;
	status_t err;
	
	(void)flags;
	err = MyMessage(theme, uisettings);
	if (err)
		uisettings.MakeEmpty();
	
	err = get_ui_settings(&uisettings, &names);
	if (err)
		return err;
	
	// hack for legacy fonts
	err = BFont::GetStandardFont(B_PLAIN_FONT, &fnt);
	uisettings.AddFlat("be:f:be_plain_font", &fnt);
	err = BFont::GetStandardFont(B_BOLD_FONT, &fnt);
	uisettings.AddFlat("be:f:be_bold_font", &fnt);
	err = BFont::GetStandardFont(B_FIXED_FONT, &fnt);
	uisettings.AddFlat("be:f:be_fixed_font", &fnt);

	err = SetMyMessage(theme, uisettings);
	return err;
}
status_t
ScreensaverThemesAddon::MakeTheme(BMessage &theme, uint32 flags)
{
	BMessage screensaver;
	status_t err;
	BPath path;
	BString str;
	BMessage settings;
	BMessage modsettings;
	
	(void)flags;
	err = MyMessage(theme, screensaver);
	if (err)
		screensaver.MakeEmpty();
	
	if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) < B_OK)
		return B_ERROR;
	path.Append("ScreenSaver_settings");
	BFile f(path.Path(), B_READ_ONLY);
	if (settings.Unflatten(&f) < B_OK)
		return B_ERROR;
	if (settings.FindString("modulename", &str) >= B_OK) {
		screensaver.AddString(Z_THEME_SS_MODULE, str.String());
		BString msname(MS_NAME);
		msname += str.String();
		if (settings.FindMessage(msname.String(), &modsettings) >= B_OK) {
		screensaver.AddMessage(Z_THEME_SS_MODULE_SETTINGS, &modsettings);
		}
	}
	
	err = SetMyMessage(theme, screensaver);
	return err;
}
status_t
TerminalThemesAddon::MakeThemeR5(BMessage &theme, uint32 flags)
{
	BMessage termpref;
	status_t err;
	struct termprefs tp;
	BPath pTermPref;
	
	(void)flags;
	err = MyMessage(theme, termpref);
	if (err)
		termpref.MakeEmpty();
	
	if (find_directory(B_USER_SETTINGS_DIRECTORY, &pTermPref) < B_OK)
		return EINVAL;
	pTermPref.Append("Terminal");
	BFile fTermPref(pTermPref.Path(), B_READ_ONLY);
	if (fTermPref.InitCheck() != B_OK)
		return fTermPref.InitCheck();
	if (fTermPref.Read(&tp, sizeof(struct termprefs)) < (ssize_t)sizeof(struct termprefs))
		return EIO;
	if ((tp.magic != TP_MAGIC) || (tp.version != TP_VERSION))
		return EINVAL;
	termpref.AddInt32(TP_COLS, tp.p.cols);
	termpref.AddInt32(TP_ROWS, tp.p.rows);
	termpref.AddInt32(TP_TABWIDTH, tp.p.tab_width);
	BFont tFont;
	font_family ff;
	font_style fs;
	BString str(tp.p.font);
	str.Truncate(str.FindFirst('/'));
	strncpy(ff, str.String(), sizeof(ff));
	str.SetTo(tp.p.font);
	str.Remove(0, str.FindFirst('/')+1);
	strncpy(fs, str.String(), sizeof(fs));
	tFont.SetFamilyAndStyle(ff, fs);
	tFont.SetSize(tp.p.font_size);
	AddFont(termpref, TP_FONT, &tFont);
	AddRGBColor(termpref, TP_BG, tp.p.bg);
	AddRGBColor(termpref, TP_FG, tp.p.fg);
	AddRGBColor(termpref, TP_CURBG, tp.p.curbg);
	AddRGBColor(termpref, TP_CURFG, tp.p.curfg);
	AddRGBColor(termpref, TP_SELBG, tp.p.selbg);
	AddRGBColor(termpref, TP_SELFG, tp.p.selfg);
	termpref.AddInt32(TP_ENCODING, tp.p.encoding);

	err = SetMyMessage(theme, termpref);
	return B_OK;
}
Пример #5
0
status_t
SoundsThemesAddon::MakeTheme(BMessage &theme, uint32 flags)
{
	BMessage sounds;
	status_t err;
	BMediaFiles bmfs;
	BString item;
	entry_ref entry;
	BEntry ent;
	BPath path;
	float gain;
	
	(void)flags;
	err = MyMessage(theme, sounds);
	if (err)
		sounds.MakeEmpty();
	
	bmfs.RewindRefs(BMediaFiles::B_SOUNDS);
	while (bmfs.GetNextRef(&item, &entry) == B_OK) {
		BMessage msg('SndI');
		path.Unset();
		ent.SetTo(&entry);
		ent.GetPath(&path);
		//printf("\t%s: %s\n", item.String(), path.Path());
		if (path.Path()) {
			msg.AddString("sounds:file", path.Path());
			gain = 1.0;
#if defined(__ANTARES__) || defined(B_BEOS_VERSION_DANO)
			bmfs.GetAudioGainFor(BMediaFiles::B_SOUNDS, item.String(), &gain);
#endif
			msg.AddFloat("sounds:volume", gain);
		}
		sounds.AddMessage(item.String(), &msg);
	}
	
	err = SetMyMessage(theme, sounds);
	return err;
}
status_t
TerminalThemesAddon::MakeThemeHaiku(BMessage &theme, uint32 flags)
{
	BMessage termpref;
	BMessage lines;
	status_t err;
	BString value;
	int n, i;
	
	(void)flags;
	err = MyMessage(theme, termpref);
	if (err)
		termpref.MakeEmpty();
	
	err = LoadHaikuTerminalSettings(lines);
	
	for (i = 0; i < NENTS(sHaikuPrefsMapInt32); i++) {
		int v;

		if (lines.FindString(sHaikuPrefsMapInt32[i].pref, &value) < B_OK)
			continue;

		n = sscanf(value.String(), "%d", &v);
		//printf("n=%d '%s'\n", n, value.String());

		if (n == 1)
			termpref.AddInt32(sHaikuPrefsMapInt32[i].name, v);
	}

	for (i = 0; i < NENTS(sHaikuPrefsMapColors); i++) {
		int r, g, b;

		if (lines.FindString(sHaikuPrefsMapColors[i].pref, &value) < B_OK)
			continue;

		n = sscanf(value.String(), "%d%*[, ]%d%*[, ]%d", &r, &g, &b);
		//printf("n=%d '%s' %d,%d,%d\n", n, value.String(), r, g, b);

		if (n == 3) {
			rgb_color c = make_color(r, g, b, 255);
			AddRGBColor(termpref, sHaikuPrefsMapColors[i].name, c);
		}
	}

	BFont font;
	BString s;
	font_family family;
	font_style style;
	float size = 12.0;
	memset(&family, 0, sizeof(family));
	memset(&style, 0, sizeof(style));

	if (lines.FindString(PREF_HALF_FONT_FAMILY, &s) == B_OK)
		strncpy(family, s.String(), B_FONT_FAMILY_LENGTH);

	if (lines.FindString(PREF_HALF_FONT_STYLE, &s) == B_OK)
		strncpy(style, s.String(), B_FONT_STYLE_LENGTH);

	font.SetFamilyAndStyle(family, style);

	if (lines.FindString(PREF_HALF_FONT_SIZE, &s) == B_OK)
		sscanf(s.String(), "%f", &size);

	font.SetSize(size);

	//termpref.PrintToStream();

	err = SetMyMessage(theme, termpref);
	return B_OK;
}
Пример #7
0
status_t
BackgroundThemesAddon::MakeTheme(BMessage &theme, uint32 flags)
{
	BMessage backgrounds;
	status_t err = B_OK;
	BPath pDesktop;
	struct attr_info ai;
	char *pAttr;
	BScreen bs;
	rgb_color last_color = {0, 0, 0, 254};
	rgb_color col;
	int last_change = 0;
	int i;
	
	(void)flags;
	err = MyMessage(theme, backgrounds);
	if (err)
		backgrounds.MakeEmpty();
	
	if (find_directory(B_DESKTOP_DIRECTORY, &pDesktop) < B_OK)
		return EINVAL;
	BNode nDesktop(pDesktop.Path());
	if (nDesktop.InitCheck() < B_OK)
		return nDesktop.InitCheck();
	if (nDesktop.GetAttrInfo(B_BACKGROUND_INFO, &ai) < B_OK)
		return EIO;
	pAttr = new char[ai.size];
	if (pAttr == NULL)
		return ENOMEM;
	err = nDesktop.ReadAttr(B_BACKGROUND_INFO, ai.type, 0LL, pAttr, ai.size);
	if (err < B_OK)
		goto getout;
	err = backgrounds.Unflatten(pAttr);
	if (err < B_OK)
		goto getout;

	// make sure other colors are removed
	backgrounds.RemoveName(B__DESKTOP_COLOR);

	// get desktop color... XXX: move it in ui_settings ?
	// should work as the rest of the fields (grouping)
	for (i = 0; i < count_workspaces(); i++) {
		col = bs.DesktopColor(i);
		if (memcmp(&last_color, &col, sizeof(rgb_color))) {
			last_change = i;
			last_color = col;
		}
	}
	//printf("ws col cnt %d\n", last_change);
	for (i = 0; i <= last_change; i++) {
		col = bs.DesktopColor(i);
		AddRGBColor(backgrounds, B__DESKTOP_COLOR, col);
		//backgrounds->AddData(B__DESKTOP_COLOR, (type_code)'RGBC', &col, 4);
	}

	err = SetMyMessage(theme, backgrounds);
	return err;

getout:
	delete [] pAttr;
	return err;
}
Пример #8
0
status_t
TerminalThemesAddon::MakeThemeHaiku(BMessage &theme, uint32 flags)
{
	BMessage termpref;
	BMessage lines;
	status_t err;
	BPath pTermPref;
	
	(void)flags;
	err = MyMessage(theme, termpref);
	if (err)
		termpref.MakeEmpty();
	
	err = LoadHaikuTerminalSettings(lines);
	
	//XXX: WRITEME

/*
	char buffer[1024];
	char key[B_FIELD_NAME_LENGTH], data[512];
	int n;
	FILE *file;
	while (fgets(buffer, sizeof(buffer), file) != NULL) {
		if (*buffer == '#')
			continue;

		n = sscanf(buffer, "%*[\"]%[^\"]%*[\"]%*[^\"]%*[\"]%[^\"]", key, data);
		if (n == 2) {
			if (strstr(key, " Color")) {
				rgb_color color;
				int r, g, b;
				n = sscanf(data, "%3d, %3d, %3d", &r, &g, &b);
				color.red = r;
				color.green = g;
				color.blue = b;
				color.alpha = 255;
				
			} else
				lines.AddString(key, data);
		}
	}
*/
/*
	BFile fTermPref(pTermPref.Path(), B_READ_ONLY);
	if (fTermPref.InitCheck() != B_OK)
		return fTermPref.InitCheck();
	if (fTermPref.Read(&tp, sizeof(struct termprefs)) < (ssize_t)sizeof(struct termprefs))
		return EIO;
	if ((tp.magic != TP_MAGIC) || (tp.version != TP_VERSION))
		return EINVAL;
	termpref.AddInt32(TP_COLS, tp.p.cols);
	termpref.AddInt32(TP_ROWS, tp.p.rows);
	termpref.AddInt32(TP_TABWIDTH, tp.p.tab_width);
	BFont tFont;
	font_family ff;
	font_style fs;
	BString str(tp.p.font);
	str.Truncate(str.FindFirst('/'));
	strncpy(ff, str.String(), sizeof(ff));
	str.SetTo(tp.p.font);
	str.Remove(0, str.FindFirst('/')+1);
	strncpy(fs, str.String(), sizeof(fs));
	tFont.SetFamilyAndStyle(ff, fs);
	tFont.SetSize(tp.p.font_size);
	AddFont(termpref, TP_FONT, &tFont);
	AddRGBColor(termpref, TP_BG, tp.p.bg);
	AddRGBColor(termpref, TP_FG, tp.p.fg);
	AddRGBColor(termpref, TP_CURBG, tp.p.curbg);
	AddRGBColor(termpref, TP_CURFG, tp.p.curfg);
	AddRGBColor(termpref, TP_SELBG, tp.p.selbg);
	AddRGBColor(termpref, TP_SELFG, tp.p.selfg);
	termpref.AddInt32(TP_ENCODING, tp.p.encoding);
*/
	err = SetMyMessage(theme, termpref);
	return B_OK;
}