Esempio n. 1
0
void Window::vOnGeneralConfigure()
{
  std::string sUiFile = sGetUiFilePath("preferences.ui");
  Glib::RefPtr<Gtk::Builder> poBuilder = Gtk::Builder::create_from_file(sUiFile);

  PreferencesDialog * poDialog = 0;
  poBuilder->get_widget_derived("PreferencesDialog", poDialog);
  poDialog->vSetConfig(m_poCoreConfig, this);
  poDialog->set_transient_for(*this);
  poDialog->run();
  poDialog->hide();
}
pascal OSStatus PreferencesDialog::WindowEventHandler(EventHandlerCallRef myHandler, EventRef event, void* userData)
{
    OSStatus	result = eventNotHandledErr;    
    UInt32		eventClass, eventKind;
    
    eventClass	= GetEventClass(event);
    eventKind	= GetEventKind(event);

	PreferencesDialog* prefDlg = reinterpret_cast<PreferencesDialog*>(userData);
	
    switch (eventClass) 
	{
        case kEventClassControl: 
		{
			ControlRef	targetControl = NULL;
			ControlID	targetControlID;

			GetEventParameter(event, kEventParamDirectObject, typeControlRef, 
							  NULL, sizeof(targetControl), NULL, &targetControl);
			if (targetControl)
				GetControlID(targetControl, &targetControlID);

			switch (eventKind) 
			{
				case kEventControlHit: 
				{					
					switch (targetControlID.id)
					{
						// simulate insert key with ctrl+up
						case 131:
							prefDlg->setFakeInsertKey(GetControl32BitValue(targetControl)-1);
							result = noErr;
							break;

						// 15 bit color toggle
						case 132:
							prefDlg->toggleUse15BitColorDepth();
							result = noErr;
							break;
					
						// Enable MIDI device
						case 129:
							prefDlg->toggleUseMidiDevice();
							result = noErr;
							break;
							
						// Save MIDI preferences
						case 128:
							prefDlg->toggleSavePreferences();
							result = noErr;
							break;

						// Record key velocity
						case 127:
							prefDlg->toggleRecordVelocity();
							result = noErr;
							break;

						// velocity amplify slider
						case 125:
						{
							prefDlg->storeVelocityAmplify(GetControlValue(targetControl));
							result = noErr;
							break;
						}
					}
					
					break;
				}
			}
			
			break;
		}
		
		// Handle window close event (= discard)
		case kEventClassWindow:
		{
			switch (eventKind) 
			{
				case kEventWindowClose: 
				{
					prefDlg->restoreDataBase();
					prefDlg->hide();
					result = noErr;
					break;
				}
			}
			
			break;
		}

        case kEventClassCommand: 
		{
			switch (eventKind) 
			{
				case kEventCommandProcess: 
				{
					HICommand command;
					GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(HICommand), NULL, &command);
					
					switch (command.commandID)
					{
						case kDiscardPreferences:
							prefDlg->restoreDataBase();
							
						case kConfirmPreferences:
						{
							// These two events are better off when sent to the main window
							SendEventToWindow(event, prefDlg->mainWindow);
							break;
						}
						
						default:
							// Handle MIDI device selection from pop-up menu
							if (command.commandID >= kMIDIDeviceBaseCommand && 
								command.commandID <= kMIDIDeviceBaseCommand + prefDlg->getNumMidiDevices())
							{
								prefDlg->storeMidiDeviceName(command.commandID - kMIDIDeviceBaseCommand);
								result = noErr;
							}
					}
					
					break;
				}
			}
			break;
		}
	}

	return result;
}