/[svn]/gigedit/trunk/src/gigedit/CombineInstrumentsDialog.cpp
ViewVC logotype

Diff of /gigedit/trunk/src/gigedit/CombineInstrumentsDialog.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3409 by schoenebeck, Tue Jan 23 16:30:56 2018 UTC revision 3780 by schoenebeck, Fri May 29 21:40:51 2020 UTC
# Line 1  Line 1 
1  /*  /*
2      Copyright (c) 2014-2018 Christian Schoenebeck      Copyright (c) 2014-2020 Christian Schoenebeck
3        
4      This file is part of "gigedit" and released under the terms of the      This file is part of "gigedit" and released under the terms of the
5      GNU General Public License version 2.      GNU General Public License version 2.
6  */  */
# Line 225  static RegionGroups groupByRegionInterse Line 225  static RegionGroups groupByRegionInterse
225  static Dimensions getDimensionsForRegionGroup(RegionGroup& regionGroup) {  static Dimensions getDimensionsForRegionGroup(RegionGroup& regionGroup) {
226      std::map<gig::dimension_t, std::set<int> > dimUpperLimits;      std::map<gig::dimension_t, std::set<int> > dimUpperLimits;
227    
228        #if DEBUG_COMBINE_INSTRUMENTS
229        printf("dimUpperLimits = {\n");
230        #endif
231      // collect all dimension region zones' upper limits      // collect all dimension region zones' upper limits
232      for (RegionGroup::iterator it = regionGroup.begin();      for (RegionGroup::iterator it = regionGroup.begin();
233           it != regionGroup.end(); ++it)           it != regionGroup.end(); ++it)
# Line 233  static Dimensions getDimensionsForRegion Line 236  static Dimensions getDimensionsForRegion
236          int previousBits = 0;          int previousBits = 0;
237          for (uint d = 0; d < rgn->Dimensions; ++d) {          for (uint d = 0; d < rgn->Dimensions; ++d) {
238              const gig::dimension_def_t& def = rgn->pDimensionDefinitions[d];              const gig::dimension_def_t& def = rgn->pDimensionDefinitions[d];
239                #if DEBUG_COMBINE_INSTRUMENTS
240                printf("\t[rgn=%p,dim=%#x] = {", rgn, def.dimension);
241                #endif
242              for (uint z = 0; z < def.zones; ++z) {              for (uint z = 0; z < def.zones; ++z) {
243                  int dr = z << previousBits;                  int dr = z << previousBits;
244                  gig::DimensionRegion* dimRgn = rgn->pDimensionRegions[dr];                  gig::DimensionRegion* dimRgn = rgn->pDimensionRegions[dr];
# Line 245  static Dimensions getDimensionsForRegion Line 251  static Dimensions getDimensionsForRegion
251                  // velocity splits of all regions is stored here, and when their                  // velocity splits of all regions is stored here, and when their
252                  // individual DimensionRegions are finally copied (later), the                  // individual DimensionRegions are finally copied (later), the
253                  // individual velocity split size are copied by that.                  // individual velocity split size are copied by that.
254                  dimUpperLimits[def.dimension].insert(                  const int upperLimit =
255                      (def.dimension == gig::dimension_velocity) ?                      (def.dimension == gig::dimension_velocity) ?
256                          z : (def.split_type == gig::split_type_bit) ?                          z : (def.split_type == gig::split_type_bit) ?
257                              ((z+1) * 128/def.zones - 1) : dimRgn->DimensionUpperLimits[dr]                              ((z+1) * 128/def.zones - 1) : dimRgn->DimensionUpperLimits[dr];
258                  );                  #if DEBUG_COMBINE_INSTRUMENTS
259                    printf(" %d,", upperLimit);
260                    #endif
261                    dimUpperLimits[def.dimension].insert(upperLimit);
262              }              }
263              previousBits += def.bits;              previousBits += def.bits;
264                #if DEBUG_COMBINE_INSTRUMENTS
265                printf(" }\n");
266                #endif
267          }          }
268      }      }
269        #if DEBUG_COMBINE_INSTRUMENTS
270        printf("}\n");
271        #endif
272    
273      // convert upper limit set to range vector      // convert upper limit set to range vector
274      Dimensions dims;      Dimensions dims;
275        #if DEBUG_COMBINE_INSTRUMENTS
276        printf("dims = {\n");
277        #endif
278      for (std::map<gig::dimension_t, std::set<int> >::const_iterator it = dimUpperLimits.begin();      for (std::map<gig::dimension_t, std::set<int> >::const_iterator it = dimUpperLimits.begin();
279           it != dimUpperLimits.end(); ++it)           it != dimUpperLimits.end(); ++it)
280      {      {
281          gig::dimension_t type = it->first;          gig::dimension_t type = it->first;
282            #if DEBUG_COMBINE_INSTRUMENTS
283            printf("\t[dim=%#x] = {", type);
284            #endif
285          int iLow = 0;          int iLow = 0;
286          for (std::set<int>::const_iterator itNums = it->second.begin();          for (std::set<int>::const_iterator itNums = it->second.begin();
287               itNums != it->second.end(); ++itNums)               itNums != it->second.end(); ++itNums)
# Line 268  static Dimensions getDimensionsForRegion Line 289  static Dimensions getDimensionsForRegion
289              const int iUpperLimit = *itNums;              const int iUpperLimit = *itNums;
290              DLS::range_t range = { uint16_t(iLow), uint16_t(iUpperLimit) };              DLS::range_t range = { uint16_t(iLow), uint16_t(iUpperLimit) };
291              dims[type].push_back(range);              dims[type].push_back(range);
292                #if DEBUG_COMBINE_INSTRUMENTS
293                printf(" %d..%d,", iLow, iUpperLimit);
294                #endif
295              iLow = iUpperLimit + 1;              iLow = iUpperLimit + 1;
296          }          }
297            #if DEBUG_COMBINE_INSTRUMENTS
298            printf(" }\n");
299            #endif
300      }      }
301        #if DEBUG_COMBINE_INSTRUMENTS
302        printf("}\n");
303        #endif
304    
305      return dims;      return dims;
306  }  }
# Line 941  CombineInstrumentsDialog::CombineInstrum Line 971  CombineInstrumentsDialog::CombineInstrum
971      }      }
972    
973      m_buttonBox.set_layout(Gtk::BUTTONBOX_END);      m_buttonBox.set_layout(Gtk::BUTTONBOX_END);
974  #if GTKMM_MAJOR_VERSION > 3 || (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION > 22)  #if GTKMM_MAJOR_VERSION > 3 || (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION > 24)
975      m_buttonBox.set_margin(5);      m_buttonBox.set_margin(5);
976  #else  #else
977      m_buttonBox.set_border_width(5);      m_buttonBox.set_border_width(5);
# Line 989  CombineInstrumentsDialog::CombineInstrum Line 1019  CombineInstrumentsDialog::CombineInstrum
1019    
1020  void CombineInstrumentsDialog::on_order_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context)  void CombineInstrumentsDialog::on_order_drag_begin(const Glib::RefPtr<Gdk::DragContext>& context)
1021  {  {
1022        #if DEBUG_COMBINE_INSTRUMENTS
1023      printf("Drag begin\n");      printf("Drag begin\n");
1024        #endif
1025      first_call_to_drag_data_get = true;      first_call_to_drag_data_get = true;
1026  }  }
1027    
1028  void CombineInstrumentsDialog::on_order_drag_data_get(const Glib::RefPtr<Gdk::DragContext>& context,  void CombineInstrumentsDialog::on_order_drag_data_get(const Glib::RefPtr<Gdk::DragContext>& context,
1029                                                         Gtk::SelectionData& selection_data, guint, guint)                                                         Gtk::SelectionData& selection_data, guint, guint)
1030  {  {
1031        #if DEBUG_COMBINE_INSTRUMENTS
1032      printf("Drag data get\n");      printf("Drag data get\n");
1033        #endif
1034      if (!first_call_to_drag_data_get) return;      if (!first_call_to_drag_data_get) return;
1035      first_call_to_drag_data_get = false;      first_call_to_drag_data_get = false;
1036    
# Line 1016  void CombineInstrumentsDialog::on_order_ Line 1050  void CombineInstrumentsDialog::on_order_
1050          printf("Drag data get: !src\n");          printf("Drag data get: !src\n");
1051          return;          return;
1052      }      }
1053        #if DEBUG_COMBINE_INSTRUMENTS
1054      printf("src=%ld\n", (size_t)src);      printf("src=%ld\n", (size_t)src);
1055        #endif
1056    
1057      // pass the source gig::Instrument as pointer      // pass the source gig::Instrument as pointer
1058      selection_data.set(selection_data.get_target(), 0/*unused*/, (const guchar*)&src,      selection_data.set(selection_data.get_target(), 0/*unused*/, (const guchar*)&src,
# Line 1027  void CombineInstrumentsDialog::on_order_ Line 1063  void CombineInstrumentsDialog::on_order_
1063      const Glib::RefPtr<Gdk::DragContext>& context, int x, int y,      const Glib::RefPtr<Gdk::DragContext>& context, int x, int y,
1064      const Gtk::SelectionData& selection_data, guint, guint time)      const Gtk::SelectionData& selection_data, guint, guint time)
1065  {  {
1066        #if DEBUG_COMBINE_INSTRUMENTS
1067      printf("Drag data received\n");      printf("Drag data received\n");
1068      if (&selection_data == NULL) {      #endif
         printf("!selection_data\n");  
         return;  
     }  
1069      if (!selection_data.get_data()) {      if (!selection_data.get_data()) {
1070          printf("selection_data.get_data() == NULL\n");          printf("selection_data.get_data() == NULL\n");
1071          return;          return;
# Line 1042  void CombineInstrumentsDialog::on_order_ Line 1076  void CombineInstrumentsDialog::on_order_
1076          printf("!src\n");          printf("!src\n");
1077          return;          return;
1078      }      }
1079      printf("src=%d\n", src);      #if DEBUG_COMBINE_INSTRUMENTS
1080        printf("src=%ld\n", (size_t)src);
1081        #endif
1082    
1083      gig::Instrument* dst = NULL;      gig::Instrument* dst = NULL;
1084      {      {
# Line 1059  void CombineInstrumentsDialog::on_order_ Line 1095  void CombineInstrumentsDialog::on_order_
1095          return;          return;
1096      }      }
1097    
1098        #if DEBUG_COMBINE_INSTRUMENTS
1099      printf("dragdrop received src='%s' dst='%s'\n", src->pInfo->Name.c_str(), dst->pInfo->Name.c_str());      printf("dragdrop received src='%s' dst='%s'\n", src->pInfo->Name.c_str(), dst->pInfo->Name.c_str());
1100        #endif
1101    
1102      // swap the two items      // swap the two items
1103      typedef Gtk::TreeModel::Children Children;      typedef Gtk::TreeModel::Children Children;
# Line 1127  void CombineInstrumentsDialog::combineSe Line 1165  void CombineInstrumentsDialog::combineSe
1165              Glib::ustring name = row[m_orderColumns.m_col_name];              Glib::ustring name = row[m_orderColumns.m_col_name];
1166              gig::Instrument* instrument = row[m_orderColumns.m_col_instr];              gig::Instrument* instrument = row[m_orderColumns.m_col_instr];
1167              #if DEBUG_COMBINE_INSTRUMENTS              #if DEBUG_COMBINE_INSTRUMENTS
1168              printf("Selection %d. '%s' %p\n\n", (i+1), name.c_str(), instrument));              printf("Selection %d. '%s' %p\n\n", (i+1), name.c_str(), instrument);
1169              #endif              #endif
1170              instruments.push_back(instrument);              instruments.push_back(instrument);
1171          }          }
# Line 1196  void CombineInstrumentsDialog::onSelecti Line 1234  void CombineInstrumentsDialog::onSelecti
1234      {      {
1235          Children allOrdered = m_refOrderModel->children();          Children allOrdered = m_refOrderModel->children();
1236          for (Children::iterator itOrder = allOrdered.begin();          for (Children::iterator itOrder = allOrdered.begin();
1237               itOrder != allOrdered.end(); ++itOrder)               itOrder != allOrdered.end(); )
1238          {          {
1239              Gtk::TreeModel::Row rowOrder = *itOrder;              Gtk::TreeModel::Row rowOrder = *itOrder;
1240              gig::Instrument* instr = rowOrder[m_orderColumns.m_col_instr];              gig::Instrument* instr = rowOrder[m_orderColumns.m_col_instr];
# Line 1208  void CombineInstrumentsDialog::onSelecti Line 1246  void CombineInstrumentsDialog::onSelecti
1246              }              }
1247              goto removeOrderedItem;              goto removeOrderedItem;
1248          nextOrderedItem:          nextOrderedItem:
1249                ++itOrder;
1250              continue;              continue;
1251          removeOrderedItem:          removeOrderedItem:
1252              m_refOrderModel->erase(itOrder);              // postfix increment here to avoid iterator invalidation
1253                m_refOrderModel->erase(itOrder++);
1254          }          }
1255      }      }
1256    

Legend:
Removed from v.3409  
changed lines
  Added in v.3780

  ViewVC Help
Powered by ViewVC