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; }
void ThemeManager::SetAddonFlags(int32 addon, uint32 flags) { FENTRY; ThemesAddon *ta; ta = AddonAt(addon); if (ta) ta->SetAddonFlags(flags); }
uint32 ThemeManager::AddonFlags(int32 addon) { FENTRY; ThemesAddon *ta; ta = AddonAt(addon); if (ta) return ta->AddonFlags(); return 0L; }
status_t ThemeManager::RunPreferencesPanel(int32 addon) { FENTRY; ThemesAddon *ta; ta = AddonAt(addon); if (ta) return ta->RunPreferencesPanel(); return B_OK; }
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; }
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; }
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; }