28 |
#define ABOUT_DIALOG |
#define ABOUT_DIALOG |
29 |
#include <gtkmm/aboutdialog.h> |
#include <gtkmm/aboutdialog.h> |
30 |
#include <gtkmm/messagedialog.h> |
#include <gtkmm/messagedialog.h> |
31 |
|
#include <gtkmm/targetentry.h> |
32 |
#endif |
#endif |
33 |
|
|
34 |
#include <stdio.h> |
#include <stdio.h> |
391 |
|
|
392 |
MainWindow::MainWindow() : |
MainWindow::MainWindow() : |
393 |
// eSample("Sample", wSample), |
// eSample("Sample", wSample), |
|
eVelocityUpperLimit("VelocityUpperLimit", |
|
|
&gig::DimensionRegion::VelocityUpperLimit), |
|
394 |
eEG1PreAttack("PreAttack", &gig::DimensionRegion::EG1PreAttack, 0, 100, 2), |
eEG1PreAttack("PreAttack", &gig::DimensionRegion::EG1PreAttack, 0, 100, 2), |
395 |
eEG1Attack("Attack", &gig::DimensionRegion::EG1Attack, 0, 60, 3), |
eEG1Attack("Attack", &gig::DimensionRegion::EG1Attack, 0, 60, 3), |
396 |
eEG1Decay1("Decay1", &gig::DimensionRegion::EG1Decay1, 0.005, 60, 3), |
eEG1Decay1("Decay1", &gig::DimensionRegion::EG1Decay1, 0.005, 60, 3), |
551 |
firstRowInBlock = 0; |
firstRowInBlock = 0; |
552 |
|
|
553 |
addString("Sample", lSample, wSample); |
addString("Sample", lSample, wSample); |
554 |
addProp(eVelocityUpperLimit); |
//TODO: the following would break drag&drop: wSample->property_editable().set_value(false); or this: wSample->set_editable(false); |
555 |
addHeader("EG1"); |
addHeader("EG1"); |
556 |
addProp(eEG1PreAttack); |
addProp(eEG1PreAttack); |
557 |
addProp(eEG1Attack); |
addProp(eEG1Attack); |
930 |
m_TreeView.set_headers_visible(false); |
m_TreeView.set_headers_visible(false); |
931 |
|
|
932 |
// create samples treeview (including its data model) |
// create samples treeview (including its data model) |
933 |
m_refSamplesTreeModel = Gtk::TreeStore::create(m_SamplesModel); |
m_refSamplesTreeModel = SamplesTreeStore::create(m_SamplesModel); |
934 |
m_TreeViewSamples.set_model(m_refSamplesTreeModel); |
m_TreeViewSamples.set_model(m_refSamplesTreeModel); |
935 |
m_TreeViewSamples.append_column("Samples", m_SamplesModel.m_col_name); |
m_TreeViewSamples.append_column("Samples", m_SamplesModel.m_col_name); |
936 |
m_TreeViewSamples.set_headers_visible(false); |
m_TreeViewSamples.set_headers_visible(false); |
938 |
sigc::mem_fun(*this, &MainWindow::on_sample_treeview_button_release) |
sigc::mem_fun(*this, &MainWindow::on_sample_treeview_button_release) |
939 |
); |
); |
940 |
|
|
941 |
|
// establish drag&drop between samples tree view and dimension region 'Sample' text entry |
942 |
|
std::list<Gtk::TargetEntry> drag_target_gig_sample; |
943 |
|
drag_target_gig_sample.push_back( Gtk::TargetEntry("gig::Sample") ); |
944 |
|
//drag_target_gig_sample.push_back( Gtk::TargetEntry("STRING") ); |
945 |
|
//drag_target_gig_sample.push_back( Gtk::TargetEntry("text/plain") ); |
946 |
|
m_TreeViewSamples.drag_source_set(drag_target_gig_sample); |
947 |
|
m_TreeViewSamples.signal_drag_data_get().connect( |
948 |
|
sigc::mem_fun(*this, &MainWindow::on_sample_treeview_drag_data_get) |
949 |
|
); |
950 |
|
wSample->drag_dest_set(drag_target_gig_sample); |
951 |
|
wSample->signal_drag_data_received().connect( |
952 |
|
sigc::mem_fun(*this, &MainWindow::on_sample_label_drop_drag_data_received) |
953 |
|
); |
954 |
|
|
955 |
file = 0; |
file = 0; |
956 |
|
|
957 |
show_all_children(); |
show_all_children(); |
990 |
{ |
{ |
991 |
update_gui = false; |
update_gui = false; |
992 |
wSample->set_text(d->pSample ? d->pSample->pInfo->Name.c_str() : "NULL"); |
wSample->set_text(d->pSample ? d->pSample->pInfo->Name.c_str() : "NULL"); |
|
eVelocityUpperLimit.set_dimreg(d); |
|
993 |
eEG1PreAttack.set_dimreg(d); |
eEG1PreAttack.set_dimreg(d); |
994 |
eEG1Attack.set_dimreg(d); |
eEG1Attack.set_dimreg(d); |
995 |
eEG1Decay1.set_dimreg(d); |
eEG1Decay1.set_dimreg(d); |
1361 |
void MainWindow::on_action_file_save() |
void MainWindow::on_action_file_save() |
1362 |
{ |
{ |
1363 |
if (!file) return; |
if (!file) return; |
1364 |
file->Save(); |
std::cout << "Saving file\n" << std::flush; |
1365 |
|
try { |
1366 |
|
file->Save(); |
1367 |
|
} catch (RIFF::Exception e) { |
1368 |
|
Glib::ustring txt = "Could not save file: " + e.Message; |
1369 |
|
Gtk::MessageDialog msg(*this, txt, false, Gtk::MESSAGE_ERROR); |
1370 |
|
msg.run(); |
1371 |
|
return; |
1372 |
|
} |
1373 |
|
std::cout << "Saving file done\n" << std::flush; |
1374 |
__import_queued_samples(); |
__import_queued_samples(); |
1375 |
} |
} |
1376 |
|
|
1385 |
dialog.set_filter(filter); |
dialog.set_filter(filter); |
1386 |
if (dialog.run() == Gtk::RESPONSE_OK) { |
if (dialog.run() == Gtk::RESPONSE_OK) { |
1387 |
printf("filename=%s\n", dialog.get_filename().c_str()); |
printf("filename=%s\n", dialog.get_filename().c_str()); |
1388 |
file->Save(dialog.get_filename()); |
try { |
1389 |
|
file->Save(dialog.get_filename()); |
1390 |
|
} catch (RIFF::Exception e) { |
1391 |
|
Glib::ustring txt = "Could not save file: " + e.Message; |
1392 |
|
Gtk::MessageDialog msg(*this, txt, false, Gtk::MESSAGE_ERROR); |
1393 |
|
msg.run(); |
1394 |
|
return; |
1395 |
|
} |
1396 |
__import_queued_samples(); |
__import_queued_samples(); |
1397 |
} |
} |
1398 |
} |
} |
1399 |
|
|
1400 |
// actually write the sample(s)' data to the gig file |
// actually write the sample(s)' data to the gig file |
1401 |
void MainWindow::__import_queued_samples() { |
void MainWindow::__import_queued_samples() { |
1402 |
|
std::cout << "Starting sample import\n" << std::flush; |
1403 |
Glib::ustring error_files; |
Glib::ustring error_files; |
1404 |
|
printf("Samples to import: %d\n", m_SampleImportQueue.size()); |
1405 |
for (std::list<SampleImportItem>::iterator iter = m_SampleImportQueue.begin(); iter != m_SampleImportQueue.end(); ) { |
for (std::list<SampleImportItem>::iterator iter = m_SampleImportQueue.begin(); iter != m_SampleImportQueue.end(); ) { |
1406 |
printf("Importing sample %s\n",(*iter).sample_path.c_str()); |
printf("Importing sample %s\n",(*iter).sample_path.c_str()); |
1407 |
SF_INFO info; |
SF_INFO info; |
1923 |
} |
} |
1924 |
} |
} |
1925 |
} |
} |
1926 |
|
|
1927 |
|
void MainWindow::on_sample_treeview_drag_data_get(const Glib::RefPtr<Gdk::DragContext>&, Gtk::SelectionData& selection_data, guint, guint) |
1928 |
|
{ |
1929 |
|
// get selected sample |
1930 |
|
gig::Sample* sample = NULL; |
1931 |
|
Glib::RefPtr<Gtk::TreeSelection> sel = m_TreeViewSamples.get_selection(); |
1932 |
|
Gtk::TreeModel::iterator it = sel->get_selected(); |
1933 |
|
if (it) { |
1934 |
|
Gtk::TreeModel::Row row = *it; |
1935 |
|
sample = row[m_SamplesModel.m_col_sample]; |
1936 |
|
} |
1937 |
|
// pass the gig::Sample as pointer |
1938 |
|
selection_data.set(selection_data.get_target(), 0/*unused*/, (const guchar*)&sample, sizeof(sample)/*length of data in bytes*/); |
1939 |
|
} |
1940 |
|
|
1941 |
|
void MainWindow::on_sample_label_drop_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int, int, const Gtk::SelectionData& selection_data, guint, guint time) |
1942 |
|
{ |
1943 |
|
gig::DimensionRegion* dimregion = m_DimRegionChooser.get_dimregion(); |
1944 |
|
gig::Sample* sample = *((gig::Sample**) selection_data.get_data()); |
1945 |
|
|
1946 |
|
if (sample && dimregion && selection_data.get_length() == sizeof(gig::Sample*)) { |
1947 |
|
if (sample != dimregion->pSample) { |
1948 |
|
dimregion->pSample = sample; |
1949 |
|
wSample->set_text(dimregion->pSample->pInfo->Name.c_str()); |
1950 |
|
std::cout << "Drop received sample \"" << dimregion->pSample->pInfo->Name.c_str() << "\"" << std::endl; |
1951 |
|
// drop success |
1952 |
|
context->drop_reply(true, time); |
1953 |
|
return; |
1954 |
|
} |
1955 |
|
} |
1956 |
|
// drop failed |
1957 |
|
context->drop_reply(false, time); |
1958 |
|
} |