Integrate MIDI settings with the Media preflet.
More or less working.
This commit is contained in:
@@ -15,6 +15,7 @@ Preference Media :
|
|||||||
MediaListItem.cpp
|
MediaListItem.cpp
|
||||||
MediaViews.cpp
|
MediaViews.cpp
|
||||||
MediaWindow.cpp
|
MediaWindow.cpp
|
||||||
|
MidiSettingsView.cpp
|
||||||
: media be localestub [ TargetLibsupc++ ]
|
: media be localestub [ TargetLibsupc++ ]
|
||||||
: media.rdef
|
: media.rdef
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include "MediaIcons.h"
|
#include "MediaIcons.h"
|
||||||
#include "MediaWindow.h"
|
#include "MediaWindow.h"
|
||||||
|
#include "MidiSettingsView.h"
|
||||||
|
|
||||||
|
|
||||||
#define kITEM_MARGIN 1
|
#define kITEM_MARGIN 1
|
||||||
@@ -307,6 +308,13 @@ NodeListItem::Comparator::Visit(AudioMixerListItem* item)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
NodeListItem::Comparator::Visit(MidiListItem* item)
|
||||||
|
{
|
||||||
|
result = GREATER_THAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark - DeviceListItem
|
// #pragma mark - DeviceListItem
|
||||||
|
|
||||||
|
|
||||||
@@ -371,6 +379,13 @@ DeviceListItem::Comparator::Visit(AudioMixerListItem* item)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DeviceListItem::Comparator::Visit(MidiListItem* item)
|
||||||
|
{
|
||||||
|
result = LESS_THAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
DeviceListItem::SetRenderParameters(Renderer& renderer)
|
DeviceListItem::SetRenderParameters(Renderer& renderer)
|
||||||
{
|
{
|
||||||
@@ -454,8 +469,101 @@ AudioMixerListItem::Comparator::Visit(AudioMixerListItem* item)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
AudioMixerListItem::Comparator::Visit(MidiListItem* item)
|
||||||
|
{
|
||||||
|
result = GREATER_THAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
AudioMixerListItem::SetRenderParameters(Renderer& renderer)
|
AudioMixerListItem::SetRenderParameters(Renderer& renderer)
|
||||||
{
|
{
|
||||||
renderer.AddIcon(&Icons()->mixerIcon);
|
renderer.AddIcon(&Icons()->mixerIcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// #pragma mark - MidiListItem
|
||||||
|
|
||||||
|
MidiListItem::MidiListItem(const char* title)
|
||||||
|
:
|
||||||
|
MediaListItem(),
|
||||||
|
fTitle(title)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiListItem::AlterWindow(MediaWindow* window)
|
||||||
|
{
|
||||||
|
window->SelectMidiSettings(fTitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char*
|
||||||
|
MidiListItem::Label()
|
||||||
|
{
|
||||||
|
return "MIDI";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiListItem::Accept(MediaListItem::Visitor& visitor)
|
||||||
|
{
|
||||||
|
visitor.Visit(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
MidiListItem::CompareWith(MediaListItem* item)
|
||||||
|
{
|
||||||
|
Comparator comparator(this);
|
||||||
|
item->Accept(comparator);
|
||||||
|
return comparator.result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
MidiListItem::Comparator::Comparator(MidiListItem* compareOthersTo)
|
||||||
|
:
|
||||||
|
result(0),
|
||||||
|
fTarget(compareOthersTo)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiListItem::Comparator::Visit(NodeListItem* item)
|
||||||
|
{
|
||||||
|
result = GREATER_THAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiListItem::Comparator::Visit(DeviceListItem* item)
|
||||||
|
{
|
||||||
|
result = GREATER_THAN;
|
||||||
|
if (item->Type() == AUDIO_TYPE)
|
||||||
|
result = LESS_THAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiListItem::Comparator::Visit(AudioMixerListItem* item)
|
||||||
|
{
|
||||||
|
result = LESS_THAN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiListItem::Comparator::Visit(MidiListItem* item)
|
||||||
|
{
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiListItem::SetRenderParameters(Renderer& renderer)
|
||||||
|
{
|
||||||
|
// TODO: Create a nice icon
|
||||||
|
renderer.AddIcon(&Icons()->mixerIcon);
|
||||||
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ class MediaWindow;
|
|||||||
|
|
||||||
class AudioMixerListItem;
|
class AudioMixerListItem;
|
||||||
class DeviceListItem;
|
class DeviceListItem;
|
||||||
|
class MidiListItem;
|
||||||
class NodeListItem;
|
class NodeListItem;
|
||||||
|
|
||||||
|
|
||||||
@@ -55,6 +56,7 @@ public:
|
|||||||
virtual void Visit(AudioMixerListItem* item) = 0;
|
virtual void Visit(AudioMixerListItem* item) = 0;
|
||||||
virtual void Visit(DeviceListItem* item) = 0;
|
virtual void Visit(DeviceListItem* item) = 0;
|
||||||
virtual void Visit(NodeListItem* item) = 0;
|
virtual void Visit(NodeListItem* item) = 0;
|
||||||
|
virtual void Visit(MidiListItem* item) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual void Accept(Visitor& visitor) = 0;
|
virtual void Accept(Visitor& visitor) = 0;
|
||||||
@@ -100,6 +102,7 @@ public:
|
|||||||
virtual void Visit(NodeListItem* item);
|
virtual void Visit(NodeListItem* item);
|
||||||
virtual void Visit(DeviceListItem* item);
|
virtual void Visit(DeviceListItem* item);
|
||||||
virtual void Visit(AudioMixerListItem* item);
|
virtual void Visit(AudioMixerListItem* item);
|
||||||
|
virtual void Visit(MidiListItem* item);
|
||||||
|
|
||||||
int result;
|
int result;
|
||||||
// -1 : < item; 0 : == item; 1 : > item
|
// -1 : < item; 0 : == item; 1 : > item
|
||||||
@@ -137,6 +140,7 @@ public:
|
|||||||
virtual void Visit(NodeListItem* item);
|
virtual void Visit(NodeListItem* item);
|
||||||
virtual void Visit(DeviceListItem* item);
|
virtual void Visit(DeviceListItem* item);
|
||||||
virtual void Visit(AudioMixerListItem* item);
|
virtual void Visit(AudioMixerListItem* item);
|
||||||
|
virtual void Visit(MidiListItem* item);
|
||||||
|
|
||||||
int result;
|
int result;
|
||||||
// -1 : < item; 0 : == item; 1 : > item
|
// -1 : < item; 0 : == item; 1 : > item
|
||||||
@@ -169,6 +173,7 @@ public:
|
|||||||
virtual void Visit(NodeListItem* item);
|
virtual void Visit(NodeListItem* item);
|
||||||
virtual void Visit(DeviceListItem* item);
|
virtual void Visit(DeviceListItem* item);
|
||||||
virtual void Visit(AudioMixerListItem* item);
|
virtual void Visit(AudioMixerListItem* item);
|
||||||
|
virtual void Visit(MidiListItem* item);
|
||||||
|
|
||||||
int result;
|
int result;
|
||||||
// -1 : < item; 0 : == item; 1 : > item
|
// -1 : < item; 0 : == item; 1 : > item
|
||||||
@@ -185,4 +190,37 @@ private:
|
|||||||
const char* fTitle;
|
const char* fTitle;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class MidiListItem : public MediaListItem {
|
||||||
|
public:
|
||||||
|
MidiListItem(const char* title);
|
||||||
|
|
||||||
|
virtual void AlterWindow(MediaWindow* window);
|
||||||
|
|
||||||
|
virtual const char* Label();
|
||||||
|
|
||||||
|
virtual void Accept(MediaListItem::Visitor& visitor);
|
||||||
|
|
||||||
|
struct Comparator : public MediaListItem::Visitor {
|
||||||
|
Comparator(MidiListItem* compareOthersTo);
|
||||||
|
virtual void Visit(NodeListItem* item);
|
||||||
|
virtual void Visit(DeviceListItem* item);
|
||||||
|
virtual void Visit(AudioMixerListItem* item);
|
||||||
|
virtual void Visit(MidiListItem* item);
|
||||||
|
|
||||||
|
int result;
|
||||||
|
// -1 : < item; 0 : == item; 1 : > item
|
||||||
|
private:
|
||||||
|
MidiListItem* fTarget;
|
||||||
|
};
|
||||||
|
|
||||||
|
// -1 : < item; 0 : == item; 1 : > item
|
||||||
|
virtual int CompareWith(MediaListItem* item);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
virtual void SetRenderParameters(Renderer& renderer);
|
||||||
|
|
||||||
|
const char* fTitle;
|
||||||
|
};
|
||||||
#endif /* __MEDIALISTITEM_H__ */
|
#endif /* __MEDIALISTITEM_H__ */
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
#include <TextView.h>
|
#include <TextView.h>
|
||||||
|
|
||||||
#include "MediaIcons.h"
|
#include "MediaIcons.h"
|
||||||
|
#include "MidiSettingsView.h"
|
||||||
|
|
||||||
#undef B_TRANSLATION_CONTEXT
|
#undef B_TRANSLATION_CONTEXT
|
||||||
#define B_TRANSLATION_CONTEXT "Media Window"
|
#define B_TRANSLATION_CONTEXT "Media Window"
|
||||||
@@ -60,7 +60,7 @@ public:
|
|||||||
|
|
||||||
virtual void Visit(AudioMixerListItem*){}
|
virtual void Visit(AudioMixerListItem*){}
|
||||||
virtual void Visit(DeviceListItem*){}
|
virtual void Visit(DeviceListItem*){}
|
||||||
|
virtual void Visit(MidiListItem*){}
|
||||||
virtual void Visit(NodeListItem* item)
|
virtual void Visit(NodeListItem* item)
|
||||||
{
|
{
|
||||||
item->Accept(fComparator);
|
item->Accept(fComparator);
|
||||||
@@ -233,6 +233,14 @@ MediaWindow::SelectAudioMixer(const char* title)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MediaWindow::SelectMidiSettings(const char* title)
|
||||||
|
{
|
||||||
|
fContentLayout->SetVisibleItem(fContentLayout->IndexOfView(fMidiView));
|
||||||
|
fTitleView->SetLabel(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
MediaWindow::UpdateInputListItem(MediaListItem::media_type type,
|
MediaWindow::UpdateInputListItem(MediaListItem::media_type type,
|
||||||
const dormant_node_info* node)
|
const dormant_node_info* node)
|
||||||
@@ -371,6 +379,9 @@ MediaWindow::_InitWindow()
|
|||||||
fVideoView = new VideoSettingsView();
|
fVideoView = new VideoSettingsView();
|
||||||
fContentLayout->AddView(fVideoView);
|
fContentLayout->AddView(fVideoView);
|
||||||
|
|
||||||
|
fMidiView = new MidiSettingsView();
|
||||||
|
fContentLayout->AddView(fMidiView);
|
||||||
|
|
||||||
// Layout all views
|
// Layout all views
|
||||||
BLayoutBuilder::Group<>(this, B_HORIZONTAL)
|
BLayoutBuilder::Group<>(this, B_HORIZONTAL)
|
||||||
.SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING,
|
.SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING,
|
||||||
@@ -455,6 +466,9 @@ MediaWindow::_InitMedia(bool first)
|
|||||||
MediaListItem::AUDIO_TYPE);
|
MediaListItem::AUDIO_TYPE);
|
||||||
fListView->AddItem(audio);
|
fListView->AddItem(audio);
|
||||||
|
|
||||||
|
MidiListItem* midi = new MidiListItem(B_TRANSLATE("MIDI Settings"));
|
||||||
|
fListView->AddItem(midi);
|
||||||
|
|
||||||
MediaListItem* video = new DeviceListItem(B_TRANSLATE("Video settings"),
|
MediaListItem* video = new DeviceListItem(B_TRANSLATE("Video settings"),
|
||||||
MediaListItem::VIDEO_TYPE);
|
MediaListItem::VIDEO_TYPE);
|
||||||
fListView->AddItem(video);
|
fListView->AddItem(video);
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
|
|
||||||
class BCardLayout;
|
class BCardLayout;
|
||||||
class BSeparatorView;
|
class BSeparatorView;
|
||||||
|
class MidiSettingsView;
|
||||||
|
|
||||||
class MediaWindow : public BWindow {
|
class MediaWindow : public BWindow {
|
||||||
public:
|
public:
|
||||||
@@ -43,6 +43,7 @@ public:
|
|||||||
void SelectAudioSettings(const char* title);
|
void SelectAudioSettings(const char* title);
|
||||||
void SelectVideoSettings(const char* title);
|
void SelectVideoSettings(const char* title);
|
||||||
void SelectAudioMixer(const char* title);
|
void SelectAudioMixer(const char* title);
|
||||||
|
void SelectMidiSettings(const char* title);
|
||||||
|
|
||||||
// methods to be called by SettingsViews...
|
// methods to be called by SettingsViews...
|
||||||
void UpdateInputListItem(
|
void UpdateInputListItem(
|
||||||
@@ -99,6 +100,7 @@ private:
|
|||||||
BCardLayout* fContentLayout;
|
BCardLayout* fContentLayout;
|
||||||
AudioSettingsView* fAudioView;
|
AudioSettingsView* fAudioView;
|
||||||
VideoSettingsView* fVideoView;
|
VideoSettingsView* fVideoView;
|
||||||
|
MidiSettingsView* fMidiView;
|
||||||
|
|
||||||
SmartNode fCurrentNode;
|
SmartNode fCurrentNode;
|
||||||
BParameterWeb* fParamWeb;
|
BParameterWeb* fParamWeb;
|
||||||
|
|||||||
@@ -0,0 +1,177 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014, Haiku, Inc. All rights reserved.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "MidiSettingsView.h"
|
||||||
|
|
||||||
|
#include <Box.h>
|
||||||
|
#include <Catalog.h>
|
||||||
|
#include <Directory.h>
|
||||||
|
#include <Entry.h>
|
||||||
|
#include <FindDirectory.h>
|
||||||
|
#include <GridView.h>
|
||||||
|
#include <LayoutBuilder.h>
|
||||||
|
#include <ListView.h>
|
||||||
|
#include <Locale.h>
|
||||||
|
#include <Node.h>
|
||||||
|
#include <NodeInfo.h>
|
||||||
|
#include <Path.h>
|
||||||
|
#include <ScrollView.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#undef B_TRANSLATION_CONTEXT
|
||||||
|
#define B_TRANSLATION_CONTEXT "Midi View"
|
||||||
|
|
||||||
|
#define SETTINGS_FILE "midi"
|
||||||
|
|
||||||
|
const static uint32 kSelectSoundFont = 'SeSf';
|
||||||
|
|
||||||
|
|
||||||
|
MidiSettingsView::MidiSettingsView()
|
||||||
|
:
|
||||||
|
SettingsView()
|
||||||
|
{
|
||||||
|
BBox* defaultsBox = new BBox("SoundFont");
|
||||||
|
defaultsBox->SetLabel(B_TRANSLATE("SoundFont"));
|
||||||
|
BGridView* defaultsGridView = new BGridView();
|
||||||
|
|
||||||
|
fListView = new BListView(B_SINGLE_SELECTION_LIST);
|
||||||
|
fListView->SetSelectionMessage(new BMessage(kSelectSoundFont));
|
||||||
|
|
||||||
|
BScrollView *scrollView = new BScrollView("ScrollView", fListView,
|
||||||
|
0, false, true);
|
||||||
|
BLayoutBuilder::Grid<>(defaultsGridView)
|
||||||
|
.SetInsets(B_USE_DEFAULT_SPACING, 0, B_USE_DEFAULT_SPACING,
|
||||||
|
B_USE_DEFAULT_SPACING)
|
||||||
|
.Add(scrollView, 0, 0);
|
||||||
|
|
||||||
|
defaultsBox->AddChild(defaultsGridView);
|
||||||
|
|
||||||
|
BLayoutBuilder::Group<>(this)
|
||||||
|
.SetInsets(0, 0, 0, 0)
|
||||||
|
.Add(defaultsBox)
|
||||||
|
.AddGlue();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* virtual */
|
||||||
|
void
|
||||||
|
MidiSettingsView::AttachedToWindow()
|
||||||
|
{
|
||||||
|
SettingsView::AttachedToWindow();
|
||||||
|
|
||||||
|
fListView->SetTarget(this);
|
||||||
|
_RetrieveSoftSynthList();
|
||||||
|
|
||||||
|
_LoadSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* virtual */
|
||||||
|
void
|
||||||
|
MidiSettingsView::MessageReceived(BMessage* message)
|
||||||
|
{
|
||||||
|
switch (message->what) {
|
||||||
|
case kSelectSoundFont:
|
||||||
|
_SaveSettings();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
SettingsView::MessageReceived(message);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiSettingsView::_RetrieveSoftSynthList()
|
||||||
|
{
|
||||||
|
char **paths = NULL;
|
||||||
|
size_t pathCount = 0;
|
||||||
|
status_t status = find_paths(B_FIND_PATH_DATA_DIRECTORY, "synth",
|
||||||
|
&paths, &pathCount);
|
||||||
|
if (status != B_OK)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fListView->MakeEmpty();
|
||||||
|
|
||||||
|
for (size_t i = 0; i < pathCount; i++) {
|
||||||
|
BDirectory directory(paths[i]);
|
||||||
|
BEntry entry;
|
||||||
|
if (directory.InitCheck() != B_OK)
|
||||||
|
continue;
|
||||||
|
while (directory.GetNextEntry(&entry) == B_OK) {
|
||||||
|
// TODO: Get rid of this as soon as we update
|
||||||
|
// the SoundFont package not to create the link
|
||||||
|
// anymore
|
||||||
|
if (!strcmp(entry.Name(), "big_synth.sy"))
|
||||||
|
continue;
|
||||||
|
BNode node(&entry);
|
||||||
|
BNodeInfo nodeInfo(&node);
|
||||||
|
char mimeType[B_MIME_TYPE_LENGTH];
|
||||||
|
// TODO: For some reason this doesn't work
|
||||||
|
if (nodeInfo.GetType(mimeType) == B_OK
|
||||||
|
/*&& !strcmp(mimeType, "audio/x-soundfont")*/) {
|
||||||
|
BPath fullPath = paths[i];
|
||||||
|
fullPath.Append(entry.Name());
|
||||||
|
fListView->AddItem(new BStringItem(fullPath.Path()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiSettingsView::_LoadSettings()
|
||||||
|
{
|
||||||
|
// TODO: Duplicated code between here
|
||||||
|
// and BSoftSynth::LoadDefaultInstruments
|
||||||
|
|
||||||
|
char buffer[512];
|
||||||
|
BPath path;
|
||||||
|
if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) == B_OK) {
|
||||||
|
path.Append(SETTINGS_FILE);
|
||||||
|
BFile file(path.Path(), B_READ_ONLY);
|
||||||
|
if (file.InitCheck() == B_OK)
|
||||||
|
file.Read(buffer, sizeof(buffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
char soundFont[512];
|
||||||
|
sscanf(buffer, "# Midi Settings\n soundfont = %s\n",
|
||||||
|
soundFont);
|
||||||
|
|
||||||
|
for (int32 i = 0; i < fListView->CountItems(); i++) {
|
||||||
|
BStringItem* item = (BStringItem*)fListView->ItemAt(i);
|
||||||
|
if (!strcmp(item->Text(), soundFont)) {
|
||||||
|
fListView->Select(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
MidiSettingsView::_SaveSettings()
|
||||||
|
{
|
||||||
|
int32 selection = fListView->CurrentSelection();
|
||||||
|
if (selection < 0)
|
||||||
|
return;
|
||||||
|
BStringItem* item = (BStringItem*)fListView->ItemAt(selection);
|
||||||
|
if (item == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
char buffer[512];
|
||||||
|
snprintf(buffer, 512, "# Midi Settings\n soundfont = %s\n",
|
||||||
|
item->Text());
|
||||||
|
|
||||||
|
BPath path;
|
||||||
|
if (find_directory(B_USER_SETTINGS_DIRECTORY, &path) == B_OK) {
|
||||||
|
path.Append(SETTINGS_FILE);
|
||||||
|
BFile file(path.Path(), B_READ_WRITE | B_CREATE_FILE | B_ERASE_FILE);
|
||||||
|
if (file.InitCheck() == B_OK)
|
||||||
|
file.Write(buffer, strlen(buffer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -7,20 +7,21 @@
|
|||||||
#define MIDIVIEW_H_
|
#define MIDIVIEW_H_
|
||||||
|
|
||||||
|
|
||||||
#include <GroupView.h>
|
#include "MediaViews.h"
|
||||||
|
|
||||||
class BButton;
|
class BButton;
|
||||||
class BListView;
|
class BListView;
|
||||||
class MidiView : public BGroupView {
|
class MidiSettingsView : public SettingsView {
|
||||||
public:
|
public:
|
||||||
MidiView();
|
MidiSettingsView();
|
||||||
virtual void AttachedToWindow();
|
virtual void AttachedToWindow();
|
||||||
virtual void MessageReceived(BMessage* message);
|
virtual void MessageReceived(BMessage* message);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void _RetrieveSoftSynthList();
|
void _RetrieveSoftSynthList();
|
||||||
|
void _LoadSettings();
|
||||||
|
void _SaveSettings();
|
||||||
|
|
||||||
BButton* fImportButton;
|
|
||||||
BListView* fListView;
|
BListView* fListView;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
SubDir HAIKU_TOP src preferences midi ;
|
|
||||||
|
|
||||||
Preference Midi :
|
|
||||||
MidiApp.cpp
|
|
||||||
MidiView.cpp
|
|
||||||
MidiWindow.cpp
|
|
||||||
: midi be localestub [ TargetLibsupc++ ]
|
|
||||||
;
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2014, Haiku, Inc. All rights reserved.
|
|
||||||
* Distributed under the terms of the MIT License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <Application.h>
|
|
||||||
|
|
||||||
#include "MidiWindow.h"
|
|
||||||
|
|
||||||
class MidiApp : public BApplication {
|
|
||||||
public:
|
|
||||||
MidiApp();
|
|
||||||
virtual void ReadyToRun();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
MidiApp app;
|
|
||||||
app.Run();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
MidiApp::MidiApp()
|
|
||||||
:
|
|
||||||
BApplication("application/x-vnd.MidiPreflet")
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* virtual */
|
|
||||||
void
|
|
||||||
MidiApp::ReadyToRun()
|
|
||||||
{
|
|
||||||
(new MidiWindow())->Show();
|
|
||||||
}
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2014, Haiku, Inc. All rights reserved.
|
|
||||||
* Distributed under the terms of the MIT License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "MidiView.h"
|
|
||||||
|
|
||||||
#include <Box.h>
|
|
||||||
#include <Button.h>
|
|
||||||
#include <Directory.h>
|
|
||||||
#include <Entry.h>
|
|
||||||
#include <FindDirectory.h>
|
|
||||||
#include <GridView.h>
|
|
||||||
#include <LayoutBuilder.h>
|
|
||||||
#include <ListView.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
const static uint32 kImportSoundFont = 'ImSf';
|
|
||||||
|
|
||||||
MidiView::MidiView()
|
|
||||||
:
|
|
||||||
BGroupView(B_VERTICAL, B_USE_DEFAULT_SPACING)
|
|
||||||
{
|
|
||||||
BBox* defaultsBox = new BBox("defaults");
|
|
||||||
defaultsBox->SetLabel("Defaults");
|
|
||||||
BGridView* defaultsGridView = new BGridView();
|
|
||||||
|
|
||||||
fListView = new BListView(B_SINGLE_SELECTION_LIST);
|
|
||||||
fImportButton = new BButton("Import SoundFont",
|
|
||||||
new BMessage(kImportSoundFont));
|
|
||||||
|
|
||||||
BLayoutBuilder::Grid<>(defaultsGridView)
|
|
||||||
.SetInsets(B_USE_DEFAULT_SPACING, 0, B_USE_DEFAULT_SPACING,
|
|
||||||
B_USE_DEFAULT_SPACING)
|
|
||||||
.Add(fListView, 0, 0)
|
|
||||||
.Add(fImportButton, 0, 1);
|
|
||||||
|
|
||||||
defaultsBox->AddChild(defaultsGridView);
|
|
||||||
|
|
||||||
BLayoutBuilder::Group<>(this)
|
|
||||||
.SetInsets(0, 0, 0, 0)
|
|
||||||
.Add(defaultsBox)
|
|
||||||
.AddGlue();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* virtual */
|
|
||||||
void
|
|
||||||
MidiView::AttachedToWindow()
|
|
||||||
{
|
|
||||||
fImportButton->SetTarget(this);
|
|
||||||
_RetrieveSoftSynthList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* virtual */
|
|
||||||
void
|
|
||||||
MidiView::MessageReceived(BMessage* message)
|
|
||||||
{
|
|
||||||
switch (message->what) {
|
|
||||||
case kImportSoundFont:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
BGroupView::MessageReceived(message);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
MidiView::_RetrieveSoftSynthList()
|
|
||||||
{
|
|
||||||
char **paths = NULL;
|
|
||||||
size_t pathCount = 0;
|
|
||||||
status_t status = find_paths(B_FIND_PATH_DATA_DIRECTORY, "synth",
|
|
||||||
&paths, &pathCount);
|
|
||||||
if (status != B_OK)
|
|
||||||
return;
|
|
||||||
|
|
||||||
fListView->MakeEmpty();
|
|
||||||
|
|
||||||
for (size_t i = 0; i < pathCount; i++) {
|
|
||||||
BDirectory directory(paths[i]);
|
|
||||||
BEntry entry;
|
|
||||||
if (directory.InitCheck() != B_OK)
|
|
||||||
continue;
|
|
||||||
while (directory.GetNextEntry(&entry) == B_OK) {
|
|
||||||
fListView->AddItem(new BStringItem(entry.Name()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2014, Haiku, Inc. All rights reserved.
|
|
||||||
* Distributed under the terms of the MIT License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "MidiWindow.h"
|
|
||||||
|
|
||||||
#include <LayoutBuilder.h>
|
|
||||||
|
|
||||||
#include "MidiView.h"
|
|
||||||
|
|
||||||
|
|
||||||
MidiWindow::MidiWindow()
|
|
||||||
:
|
|
||||||
BWindow(BRect(40, 40, 260, 260), "Midi Preferences",
|
|
||||||
B_TITLED_WINDOW, B_SUPPORTS_LAYOUT)
|
|
||||||
{
|
|
||||||
fMidiView = new MidiView();
|
|
||||||
BLayoutBuilder::Group<>(this, B_HORIZONTAL)
|
|
||||||
.SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING,
|
|
||||||
B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING)
|
|
||||||
.Add(fMidiView, 0.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2014, Haiku, Inc. All rights reserved.
|
|
||||||
* Distributed under the terms of the MIT License.
|
|
||||||
*/
|
|
||||||
#ifndef MIDIWINDOW_H_
|
|
||||||
#define MIDIWINDOW_H_
|
|
||||||
|
|
||||||
#include <Window.h>
|
|
||||||
|
|
||||||
class MidiView;
|
|
||||||
class MidiWindow : public BWindow {
|
|
||||||
public:
|
|
||||||
MidiWindow();
|
|
||||||
private:
|
|
||||||
MidiView* fMidiView;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* MIDIWINDOW_H_ */
|
|
||||||
Reference in New Issue
Block a user