Ejemplo n.º 1
0
void AppConfig::FolderOptions::LoadSave( IniInterface& ini )
{
	ScopedIniGroup path( ini, L"Folders" );

	if( ini.IsSaving() )
	{
		ApplyDefaults();
	}

	IniBitBool( UseDefaultBios );
	IniBitBool( UseDefaultSnapshots );
	IniBitBool( UseDefaultSavestates );
	IniBitBool( UseDefaultMemoryCards );
	IniBitBool( UseDefaultLogs );
	IniBitBool( UseDefaultLangs );
	IniBitBool( UseDefaultPluginsFolder );
	IniBitBool( UseDefaultCheats );
	IniBitBool( UseDefaultCheatsWS );

	//when saving in portable mode, we save relative paths if possible
	 //  --> on load, these relative paths will be expanded relative to the exe folder.
	bool rel = ( ini.IsLoading() || IsPortable() );
	
	IniEntryDirFile( Bios,  rel);
	IniEntryDirFile( Snapshots,  rel );
	IniEntryDirFile( Savestates,  rel );
	IniEntryDirFile( MemoryCards,  rel );
	IniEntryDirFile( Logs,  rel );
	IniEntryDirFile( Langs,  rel );
	IniEntryDirFile( Cheats, rel );
	IniEntryDirFile( CheatsWS, rel );
	ini.Entry( L"PluginsFolder", PluginsFolder, InstallFolder + PathDefs::Base::Plugins(), rel );

	IniEntryDirFile( RunIso, rel );
	IniEntryDirFile( RunELF, rel );

	if( ini.IsLoading() )
	{
		ApplyDefaults();

		for( int i=0; i<FolderId_COUNT; ++i )
			operator[]( (FoldersEnum_t)i ).Normalize();
	}
}
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;
		}
	}
}