Integrate MIDI settings with the Media preflet.
More or less working.
This commit is contained in:
@@ -15,6 +15,7 @@ Preference Media :
|
||||
MediaListItem.cpp
|
||||
MediaViews.cpp
|
||||
MediaWindow.cpp
|
||||
MidiSettingsView.cpp
|
||||
: media be localestub [ TargetLibsupc++ ]
|
||||
: media.rdef
|
||||
;
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
#include "MediaIcons.h"
|
||||
#include "MediaWindow.h"
|
||||
#include "MidiSettingsView.h"
|
||||
|
||||
|
||||
#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
|
||||
|
||||
|
||||
@@ -371,6 +379,13 @@ DeviceListItem::Comparator::Visit(AudioMixerListItem* item)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DeviceListItem::Comparator::Visit(MidiListItem* item)
|
||||
{
|
||||
result = LESS_THAN;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DeviceListItem::SetRenderParameters(Renderer& renderer)
|
||||
{
|
||||
@@ -454,8 +469,101 @@ AudioMixerListItem::Comparator::Visit(AudioMixerListItem* item)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
AudioMixerListItem::Comparator::Visit(MidiListItem* item)
|
||||
{
|
||||
result = GREATER_THAN;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
AudioMixerListItem::SetRenderParameters(Renderer& renderer)
|
||||
{
|
||||
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 DeviceListItem;
|
||||
class MidiListItem;
|
||||
class NodeListItem;
|
||||
|
||||
|
||||
@@ -55,6 +56,7 @@ public:
|
||||
virtual void Visit(AudioMixerListItem* item) = 0;
|
||||
virtual void Visit(DeviceListItem* item) = 0;
|
||||
virtual void Visit(NodeListItem* item) = 0;
|
||||
virtual void Visit(MidiListItem* item) = 0;
|
||||
};
|
||||
|
||||
virtual void Accept(Visitor& visitor) = 0;
|
||||
@@ -100,6 +102,7 @@ public:
|
||||
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
|
||||
@@ -137,6 +140,7 @@ public:
|
||||
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
|
||||
@@ -169,6 +173,7 @@ public:
|
||||
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
|
||||
@@ -185,4 +190,37 @@ private:
|
||||
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__ */
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
#include <TextView.h>
|
||||
|
||||
#include "MediaIcons.h"
|
||||
|
||||
#include "MidiSettingsView.h"
|
||||
|
||||
#undef B_TRANSLATION_CONTEXT
|
||||
#define B_TRANSLATION_CONTEXT "Media Window"
|
||||
@@ -60,7 +60,7 @@ public:
|
||||
|
||||
virtual void Visit(AudioMixerListItem*){}
|
||||
virtual void Visit(DeviceListItem*){}
|
||||
|
||||
virtual void Visit(MidiListItem*){}
|
||||
virtual void Visit(NodeListItem* item)
|
||||
{
|
||||
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
|
||||
MediaWindow::UpdateInputListItem(MediaListItem::media_type type,
|
||||
const dormant_node_info* node)
|
||||
@@ -371,6 +379,9 @@ MediaWindow::_InitWindow()
|
||||
fVideoView = new VideoSettingsView();
|
||||
fContentLayout->AddView(fVideoView);
|
||||
|
||||
fMidiView = new MidiSettingsView();
|
||||
fContentLayout->AddView(fMidiView);
|
||||
|
||||
// Layout all views
|
||||
BLayoutBuilder::Group<>(this, B_HORIZONTAL)
|
||||
.SetInsets(B_USE_DEFAULT_SPACING, B_USE_DEFAULT_SPACING,
|
||||
@@ -455,6 +466,9 @@ MediaWindow::_InitMedia(bool first)
|
||||
MediaListItem::AUDIO_TYPE);
|
||||
fListView->AddItem(audio);
|
||||
|
||||
MidiListItem* midi = new MidiListItem(B_TRANSLATE("MIDI Settings"));
|
||||
fListView->AddItem(midi);
|
||||
|
||||
MediaListItem* video = new DeviceListItem(B_TRANSLATE("Video settings"),
|
||||
MediaListItem::VIDEO_TYPE);
|
||||
fListView->AddItem(video);
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
class BCardLayout;
|
||||
class BSeparatorView;
|
||||
|
||||
class MidiSettingsView;
|
||||
|
||||
class MediaWindow : public BWindow {
|
||||
public:
|
||||
@@ -43,6 +43,7 @@ public:
|
||||
void SelectAudioSettings(const char* title);
|
||||
void SelectVideoSettings(const char* title);
|
||||
void SelectAudioMixer(const char* title);
|
||||
void SelectMidiSettings(const char* title);
|
||||
|
||||
// methods to be called by SettingsViews...
|
||||
void UpdateInputListItem(
|
||||
@@ -99,6 +100,7 @@ private:
|
||||
BCardLayout* fContentLayout;
|
||||
AudioSettingsView* fAudioView;
|
||||
VideoSettingsView* fVideoView;
|
||||
MidiSettingsView* fMidiView;
|
||||
|
||||
SmartNode fCurrentNode;
|
||||
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_
|
||||
|
||||
|
||||
#include <GroupView.h>
|
||||
#include "MediaViews.h"
|
||||
|
||||
class BButton;
|
||||
class BListView;
|
||||
class MidiView : public BGroupView {
|
||||
class MidiSettingsView : public SettingsView {
|
||||
public:
|
||||
MidiView();
|
||||
MidiSettingsView();
|
||||
virtual void AttachedToWindow();
|
||||
virtual void MessageReceived(BMessage* message);
|
||||
|
||||
private:
|
||||
void _RetrieveSoftSynthList();
|
||||
void _LoadSettings();
|
||||
void _SaveSettings();
|
||||
|
||||
BButton* fImportButton;
|
||||
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