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

Diff of /gigedit/trunk/src/gigedit/mainwindow.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 3441 by schoenebeck, Sun Dec 9 20:48:18 2018 UTC
# Line 1356  MainWindow::MainWindow() : Line 1356  MainWindow::MainWindow() :
1356      m_TreeView.set_model(m_refTreeModelFilter);      m_TreeView.set_model(m_refTreeModelFilter);
1357    
1358      m_TreeView.get_selection()->set_mode(Gtk::SELECTION_MULTIPLE);      m_TreeView.get_selection()->set_mode(Gtk::SELECTION_MULTIPLE);
1359      m_TreeView.set_tooltip_text(_("Right click here for actions on instruments & MIDI Rules. Drag & drop to change the order of instruments."));      m_TreeView.set_has_tooltip(true);
1360        m_TreeView.signal_query_tooltip().connect(
1361            sigc::mem_fun(*this, &MainWindow::onQueryTreeViewTooltip)
1362        );
1363      instrument_name_connection = m_refTreeModel->signal_row_changed().connect(      instrument_name_connection = m_refTreeModel->signal_row_changed().connect(
1364          sigc::mem_fun(*this, &MainWindow::instrument_name_changed)          sigc::mem_fun(*this, &MainWindow::instrument_name_changed)
1365      );      );
# Line 1597  MainWindow::MainWindow() : Line 1600  MainWindow::MainWindow() :
1600          Gtk::AccelMap::add_entry("<Macros>/macro_9", GDK_KEY_F10, noModifier);          Gtk::AccelMap::add_entry("<Macros>/macro_9", GDK_KEY_F10, noModifier);
1601          Gtk::AccelMap::add_entry("<Macros>/macro_10", GDK_KEY_F11, noModifier);          Gtk::AccelMap::add_entry("<Macros>/macro_10", GDK_KEY_F11, noModifier);
1602          Gtk::AccelMap::add_entry("<Macros>/macro_11", GDK_KEY_F12, noModifier);          Gtk::AccelMap::add_entry("<Macros>/macro_11", GDK_KEY_F12, noModifier);
1603            Gtk::AccelMap::add_entry("<Macros>/macro_12", GDK_KEY_F13, noModifier);
1604            Gtk::AccelMap::add_entry("<Macros>/macro_13", GDK_KEY_F14, noModifier);
1605            Gtk::AccelMap::add_entry("<Macros>/macro_14", GDK_KEY_F15, noModifier);
1606            Gtk::AccelMap::add_entry("<Macros>/macro_15", GDK_KEY_F16, noModifier);
1607            Gtk::AccelMap::add_entry("<Macros>/macro_16", GDK_KEY_F17, noModifier);
1608            Gtk::AccelMap::add_entry("<Macros>/macro_17", GDK_KEY_F18, noModifier);
1609            Gtk::AccelMap::add_entry("<Macros>/macro_18", GDK_KEY_F19, noModifier);
1610          Gtk::AccelMap::add_entry("<Macros>/SetupMacros", 'm', primaryModifierKey);          Gtk::AccelMap::add_entry("<Macros>/SetupMacros", 'm', primaryModifierKey);
1611    
1612          Glib::RefPtr<Gtk::AccelGroup> accelGroup = this->get_accel_group();          Glib::RefPtr<Gtk::AccelGroup> accelGroup = this->get_accel_group();
# Line 1619  MainWindow::MainWindow() : Line 1629  MainWindow::MainWindow() :
1629          Gtk::AccelMap::add_entry("<Scripts>/script_9", GDK_KEY_F10, Gdk::SHIFT_MASK);          Gtk::AccelMap::add_entry("<Scripts>/script_9", GDK_KEY_F10, Gdk::SHIFT_MASK);
1630          Gtk::AccelMap::add_entry("<Scripts>/script_10", GDK_KEY_F11, Gdk::SHIFT_MASK);          Gtk::AccelMap::add_entry("<Scripts>/script_10", GDK_KEY_F11, Gdk::SHIFT_MASK);
1631          Gtk::AccelMap::add_entry("<Scripts>/script_11", GDK_KEY_F12, Gdk::SHIFT_MASK);          Gtk::AccelMap::add_entry("<Scripts>/script_11", GDK_KEY_F12, Gdk::SHIFT_MASK);
1632            Gtk::AccelMap::add_entry("<Scripts>/script_12", GDK_KEY_F13, Gdk::SHIFT_MASK);
1633            Gtk::AccelMap::add_entry("<Scripts>/script_13", GDK_KEY_F14, Gdk::SHIFT_MASK);
1634            Gtk::AccelMap::add_entry("<Scripts>/script_14", GDK_KEY_F15, Gdk::SHIFT_MASK);
1635            Gtk::AccelMap::add_entry("<Scripts>/script_15", GDK_KEY_F16, Gdk::SHIFT_MASK);
1636            Gtk::AccelMap::add_entry("<Scripts>/script_16", GDK_KEY_F17, Gdk::SHIFT_MASK);
1637            Gtk::AccelMap::add_entry("<Scripts>/script_17", GDK_KEY_F18, Gdk::SHIFT_MASK);
1638            Gtk::AccelMap::add_entry("<Scripts>/script_18", GDK_KEY_F19, Gdk::SHIFT_MASK);
1639            Gtk::AccelMap::add_entry("<Scripts>/DropAllScriptSlots", GDK_KEY_BackSpace, Gdk::SHIFT_MASK);
1640    
1641          Glib::RefPtr<Gtk::AccelGroup> accelGroup = this->get_accel_group();          Glib::RefPtr<Gtk::AccelGroup> accelGroup = this->get_accel_group();
1642          assign_scripts_menu->set_accel_group(accelGroup);          assign_scripts_menu->set_accel_group(accelGroup);
# Line 2622  void MainWindow::on_show_tooltips_change Line 2640  void MainWindow::on_show_tooltips_change
2640      dimreg_all_regions.set_has_tooltip(b);      dimreg_all_regions.set_has_tooltip(b);
2641      dimreg_all_dimregs.set_has_tooltip(b);      dimreg_all_dimregs.set_has_tooltip(b);
2642      dimreg_stereo.set_has_tooltip(b);      dimreg_stereo.set_has_tooltip(b);
2643      m_TreeView.set_has_tooltip(b);  
2644        // Not doing this here, we let onQueryTreeViewTooltip() handle this per cell
2645        //m_TreeView.set_has_tooltip(b);
2646    
2647      m_TreeViewSamples.set_has_tooltip(b);      m_TreeViewSamples.set_has_tooltip(b);
2648      m_TreeViewScripts.set_has_tooltip(b);      m_TreeViewScripts.set_has_tooltip(b);
2649    
# Line 2783  void PropDialog::set_file(gig::File* fil Line 2804  void PropDialog::set_file(gig::File* fil
2804      std::vector<std::string> txts;      std::vector<std::string> txts;
2805      std::vector<int> values;      std::vector<int> values;
2806      txts.push_back(sGiga + "2"); values.push_back(2);      txts.push_back(sGiga + "2"); values.push_back(2);
2807      txts.push_back(sGiga + "3/v4"); values.push_back(3);      txts.push_back(sGiga + "3"); values.push_back(3);
2808      if (major != 2 && major != 3) {      txts.push_back(sGiga + "4"); values.push_back(4);
2809        if (major < 2 || major > 4) {
2810          txts.push_back(sGiga + ToString(major)); values.push_back(major);          txts.push_back(sGiga + ToString(major)); values.push_back(major);
2811      }      }
2812      std::vector<const char*> texts;      std::vector<const char*> texts;
# Line 2974  void MainWindow::updateSampleRefCountMap Line 2996  void MainWindow::updateSampleRefCountMap
2996      }      }
2997  }  }
2998    
2999    bool MainWindow::onQueryTreeViewTooltip(int x, int y, bool keyboardTip, const Glib::RefPtr<Gtk::Tooltip>& tooltip) {
3000        Gtk::TreeModel::iterator iter;
3001        m_TreeView.get_tooltip_context_iter(x, y, keyboardTip, iter);
3002        Gtk::TreeModel::Path path(iter);
3003        Gtk::TreeModel::Row row = *iter;
3004        Gtk::TreeViewColumn* pointedColumn = NULL;
3005        // resolve the precise table column the mouse points to
3006        {
3007            Gtk::TreeModel::Path path; // unused
3008            int cellX, cellY; // unused
3009            m_TreeView.get_path_at_pos(x, y, path, pointedColumn, cellX, cellY);
3010        }
3011        Gtk::TreeViewColumn* scriptsColumn = m_TreeView.get_column(2);
3012        if (pointedColumn == scriptsColumn) { // mouse hovers scripts column ...
3013            // show the script(s) assigned to the hovered instrument as tooltip
3014            tooltip->set_markup( row[m_Columns.m_col_tooltip] );
3015            m_TreeView.set_tooltip_cell(tooltip, &path, scriptsColumn, NULL);
3016        } else {
3017            // if beginners' tooltips is disabled then don't show the following one
3018            if (!Settings::singleton()->showTooltips)
3019                return false;
3020            // yeah, a beginners tooltip
3021            tooltip->set_text(_(
3022                "Right click here for actions on instruments & MIDI Rules. "
3023                "Drag & drop to change the order of instruments."
3024            ));
3025            m_TreeView.set_tooltip_cell(tooltip, &path, pointedColumn, NULL);
3026        }
3027        return true;
3028    }
3029    
3030    static Glib::ustring scriptTooltipFor(gig::Instrument* instrument, int index) {
3031        Glib::ustring name(gig_to_utf8(instrument->pInfo->Name));
3032        const int iScriptSlots = instrument->ScriptSlotCount();
3033        Glib::ustring tooltip = "<u>(" + ToString(index) + ") „"  + name + "”</u>\n\n";
3034        if (!iScriptSlots)
3035            tooltip += "<span foreground='red'><i>No script assigned</i></span>";
3036        else {
3037            for (int i = 0; i < iScriptSlots; ++i) {
3038                tooltip += "• " + ToString(i+1) + ". Script:  „<span foreground='#46DEFF'><b>" +
3039                           instrument->GetScriptOfSlot(i)->Name + "</b></span>”";
3040                if (i + 1 < iScriptSlots) tooltip += "\n\n";
3041            }
3042        }
3043        return tooltip;
3044    }
3045    
3046  void MainWindow::load_gig(gig::File* gig, const char* filename, bool isSharedInstrument)  void MainWindow::load_gig(gig::File* gig, const char* filename, bool isSharedInstrument)
3047  {  {
3048      file = 0;      file = 0;
# Line 3003  void MainWindow::load_gig(gig::File* gig Line 3072  void MainWindow::load_gig(gig::File* gig
3072          row[m_Columns.m_col_name] = name;          row[m_Columns.m_col_name] = name;
3073          row[m_Columns.m_col_instr] = instrument;          row[m_Columns.m_col_instr] = instrument;
3074          row[m_Columns.m_col_scripts] = iScriptSlots ? ToString(iScriptSlots) : "";          row[m_Columns.m_col_scripts] = iScriptSlots ? ToString(iScriptSlots) : "";
3075            row[m_Columns.m_col_tooltip] = scriptTooltipFor(instrument, index);
3076    
3077  #if !USE_GTKMM_BUILDER  #if !USE_GTKMM_BUILDER
3078          add_instrument_to_menu(name);          add_instrument_to_menu(name);
# Line 3120  void MainWindow::instr_name_changed_by_i Line 3190  void MainWindow::instr_name_changed_by_i
3190      gig::Instrument* instrument = row[m_Columns.m_col_instr];      gig::Instrument* instrument = row[m_Columns.m_col_instr];
3191      Glib::ustring gigname(gig_to_utf8(instrument->pInfo->Name));      Glib::ustring gigname(gig_to_utf8(instrument->pInfo->Name));
3192      if (gigname != name) {      if (gigname != name) {
3193            Gtk::TreeModel::Path path(*it);
3194            const int index = path[0];
3195          row[m_Columns.m_col_name] = gigname;          row[m_Columns.m_col_name] = gigname;
3196            row[m_Columns.m_col_tooltip] = scriptTooltipFor(instrument, index);
3197      }      }
3198  }  }
3199    
# Line 3166  void MainWindow::onScriptSlotsModified(g Line 3239  void MainWindow::onScriptSlotsModified(g
3239          Gtk::TreeModel::Row row = model->children()[i];          Gtk::TreeModel::Row row = model->children()[i];
3240          if (row[m_Columns.m_col_instr] != pInstrument) continue;          if (row[m_Columns.m_col_instr] != pInstrument) continue;
3241          row[m_Columns.m_col_scripts] = iScriptSlots ? ToString(iScriptSlots) : "";          row[m_Columns.m_col_scripts] = iScriptSlots ? ToString(iScriptSlots) : "";
3242            row[m_Columns.m_col_tooltip] = scriptTooltipFor(pInstrument, i);
3243          break;          break;
3244      }      }
3245    
# Line 3191  void MainWindow::assignScript(gig::Scrip Line 3265  void MainWindow::assignScript(gig::Scrip
3265      onScriptSlotsModified(pInstrument);      onScriptSlotsModified(pInstrument);
3266  }  }
3267    
3268    void MainWindow::dropAllScriptSlots() {
3269        gig::Instrument* pInstrument = get_instrument();
3270        if (!pInstrument) {
3271            printf("!instrument\n");
3272            return;
3273        }
3274    
3275        const int iScriptSlots = pInstrument->ScriptSlotCount();
3276        for (int i = iScriptSlots - 1; i >= 0; --i)
3277            pInstrument->RemoveScriptSlot(i);
3278    
3279        onScriptSlotsModified(pInstrument);
3280    }
3281    
3282  void MainWindow::on_action_refresh_all() {  void MainWindow::on_action_refresh_all() {
3283      __refreshEntireGUI();      __refreshEntireGUI();
3284  }  }
# Line 3631  void MainWindow::updateScriptListOfMenu( Line 3719  void MainWindow::updateScriptListOfMenu(
3719          assign_scripts_menu->append(*item);          assign_scripts_menu->append(*item);
3720      }      }
3721    
3722        // add separator line to menu
3723        assign_scripts_menu->append(*new Gtk::SeparatorMenuItem);
3724    
3725        {
3726            Gtk::MenuItem* item = new Gtk::MenuItem(_("Unassign All Scripts"));
3727            item->signal_activate().connect(
3728                sigc::mem_fun(*this, &MainWindow::dropAllScriptSlots)
3729            );
3730            assign_scripts_menu->append(*item);
3731            item->set_accel_path("<Scripts>/DropAllScriptSlots");
3732        }
3733    
3734  #if HAS_GTKMM_SHOW_ALL_CHILDREN  #if HAS_GTKMM_SHOW_ALL_CHILDREN
3735      assign_scripts_menu->show_all_children();      assign_scripts_menu->show_all_children();
3736  #endif  #endif
# Line 3679  void MainWindow::add_instrument(gig::Ins Line 3779  void MainWindow::add_instrument(gig::Ins
3779      instrument_name_connection.block();      instrument_name_connection.block();
3780      Gtk::TreeModel::iterator iterInstr = m_refTreeModel->append();      Gtk::TreeModel::iterator iterInstr = m_refTreeModel->append();
3781      Gtk::TreeModel::Row rowInstr = *iterInstr;      Gtk::TreeModel::Row rowInstr = *iterInstr;
3782      rowInstr[m_Columns.m_col_nr] = m_refTreeModel->children().size() - 1;      const int index = m_refTreeModel->children().size() - 1;
3783        rowInstr[m_Columns.m_col_nr] = index;
3784      rowInstr[m_Columns.m_col_name] = name;      rowInstr[m_Columns.m_col_name] = name;
3785      rowInstr[m_Columns.m_col_instr] = instrument;      rowInstr[m_Columns.m_col_instr] = instrument;
3786      rowInstr[m_Columns.m_col_scripts] = "";      rowInstr[m_Columns.m_col_scripts] = "";
3787        rowInstr[m_Columns.m_col_tooltip] = scriptTooltipFor(instrument, index);
3788      instrument_name_connection.unblock();      instrument_name_connection.unblock();
3789    
3790  #if !USE_GTKMM_BUILDER  #if !USE_GTKMM_BUILDER
# Line 3769  void MainWindow::on_action_remove_instru Line 3871  void MainWindow::on_action_remove_instru
3871                       it != m_refTreeModel->children().end(); ++it, ++index)                       it != m_refTreeModel->children().end(); ++it, ++index)
3872                  {                  {
3873                      Gtk::TreeModel::Row row = *it;                      Gtk::TreeModel::Row row = *it;
3874                        gig::Instrument* instrument = row[m_Columns.m_col_instr];
3875                      row[m_Columns.m_col_nr] = index;                      row[m_Columns.m_col_nr] = index;
3876                        row[m_Columns.m_col_tooltip] = scriptTooltipFor(instrument, index);
3877                  }                  }
3878              }              }
3879    

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

  ViewVC Help
Powered by ViewVC