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

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

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

revision 2641 by schoenebeck, Mon Jun 16 15:24:54 2014 UTC revision 3105 by schoenebeck, Fri Feb 10 18:40:26 2017 UTC
# Line 17  Line 17 
17   * 02110-1301 USA.   * 02110-1301 USA.
18   */   */
19    
20    #include <glibmmconfig.h>
21    // threads.h must be included first to be able to build with
22    // G_DISABLE_DEPRECATED
23    #if (GLIBMM_MAJOR_VERSION == 2 && GLIBMM_MINOR_VERSION == 31 && GLIBMM_MICRO_VERSION >= 2) || \
24        (GLIBMM_MAJOR_VERSION == 2 && GLIBMM_MINOR_VERSION > 31) || GLIBMM_MAJOR_VERSION > 2
25    #include <glibmm/threads.h>
26    #endif
27    
28  #include "dimensionmanager.h"  #include "dimensionmanager.h"
29    
 #include <gtkmm/stock.h>  
30  #include <gtkmm/messagedialog.h>  #include <gtkmm/messagedialog.h>
31  #include <gtkmm/dialog.h>  #include <gtkmm/dialog.h>
32  #include <gtkmm/comboboxtext.h>  #include <gtkmm/comboboxtext.h>
# Line 236  void IntSetCellRenderer::valueChanged() Line 243  void IntSetCellRenderer::valueChanged()
243  }  }
244    
245  DimensionManager::DimensionManager() :  DimensionManager::DimensionManager() :
246  addButton(Gtk::Stock::ADD), removeButton(Gtk::Stock::REMOVE),      addButton(_("_Add"), true),
247  allRegionsCheckBox(_("All Regions"))      removeButton(_("_Remove"), true),
248        allRegionsCheckBox(_("All Regions"))
249  {  {
250      ignoreColumnClicked = true;      ignoreColumnClicked = true;
251    
# Line 384  void DimensionManager::set_region(gig::R Line 392  void DimensionManager::set_region(gig::R
392  }  }
393    
394  void DimensionManager::onColumnClicked() {  void DimensionManager::onColumnClicked() {
395        printf("DimensionManager::onColumnClicked()\n");
396    
397        //FIXME: BUG: this method is currently very unreliably called, it should actually be called when the user selects another column, it is ATM however also called when the table content changed programmatically causing the dialog below to popup at undesired times !
398    
399      //HACK: Prevents that onColumnClicked() gets called multiple times or at times where it is not desired      //HACK: Prevents that onColumnClicked() gets called multiple times or at times where it is not desired
400      if (ignoreColumnClicked) {      if (ignoreColumnClicked) {
401          ignoreColumnClicked = false;          ignoreColumnClicked = false;
402          return;          return;
403      }      }
404    #if (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION >= 18) || GTKMM_MAJOR_VERSION > 2
405        // prevents app to crash if this dialog is closed
406        if (!get_visible())
407            return;
408    #else
409    # warning Your GTKMM version is too old; dimension manager dialog might crash when changing a dimension type !
410    #endif
411    
412    #if (GTKMM_MAJOR_VERSION == 3 && GTKMM_MINOR_VERSION >= 8) || GTKMM_MAJOR_VERSION > 3
413        if (!is_visible()) return;
414    #endif
415    
416      Gtk::TreeModel::Path path;      Gtk::TreeModel::Path path;
417      Gtk::TreeViewColumn* focus_column;      Gtk::TreeViewColumn* focus_column;
# Line 396  void DimensionManager::onColumnClicked() Line 419  void DimensionManager::onColumnClicked()
419      //const int row = path[0];      //const int row = path[0];
420      if (focus_column == treeView.get_column(0)) {      if (focus_column == treeView.get_column(0)) {
421          Gtk::TreeModel::iterator it = treeView.get_model()->get_iter(path);          Gtk::TreeModel::iterator it = treeView.get_model()->get_iter(path);
422            if (!it) return;
423          Gtk::TreeModel::Row row = *it;          Gtk::TreeModel::Row row = *it;
424          gig::dimension_t oldType = row[tableModel.m_type];          gig::dimension_t oldType = row[tableModel.m_type];
425    
# Line 423  void DimensionManager::onColumnClicked() Line 447  void DimensionManager::onColumnClicked()
447          table.attach(comboDimType, 1, 2, 0, 1);          table.attach(comboDimType, 1, 2, 0, 1);
448          dialog.get_vbox()->pack_start(table);          dialog.get_vbox()->pack_start(table);
449    
450          dialog.add_button(Gtk::Stock::OK, 0);          dialog.add_button(_("_OK"), 0);
451          dialog.add_button(Gtk::Stock::CANCEL, 1);          dialog.add_button(_("_Cancel"), 1);
452          dialog.show_all_children();          dialog.show_all_children();
453                    
454          comboDimType.set_active(oldTypeIndex);          comboDimType.set_active(oldTypeIndex);
455    
456          if (!dialog.run()) { // OK selected ...          if (!dialog.run()) { // OK selected ...
457                ignoreColumnClicked = true;
458              Gtk::TreeModel::iterator iterType = comboDimType.get_active();              Gtk::TreeModel::iterator iterType = comboDimType.get_active();
459              if (!iterType) return;              if (!iterType) return;
460              Gtk::TreeModel::Row rowType = *iterType;              Gtk::TreeModel::Row rowType = *iterType;
# Line 438  void DimensionManager::onColumnClicked() Line 463  void DimensionManager::onColumnClicked()
463              gig::dimension_t newType = static_cast<gig::dimension_t>(iTypeID);              gig::dimension_t newType = static_cast<gig::dimension_t>(iTypeID);
464              if (newType == oldType) return;              if (newType == oldType) return;
465              //printf("change 0x%x -> 0x%x\n", oldType, newType);              //printf("change 0x%x -> 0x%x\n", oldType, newType);
             ignoreColumnClicked = true;  
466    
467              // assemble the list of regions where the selected dimension type              // assemble the list of regions where the selected dimension type
468              // shall be changed              // shall be changed
# Line 497  void DimensionManager::onColumnClicked() Line 521  void DimensionManager::onColumnClicked()
521                  msg.run();                  msg.run();
522              }              }
523          }          }
524        } else if (focus_column == treeView.get_column(1) || focus_column == treeView.get_column(2)) {
525            Glib::ustring txt = _("Right-click on a specific dimension zone of the dimension region selector to delete or split that particular dimension zone!");
526            Gtk::MessageDialog msg(*this, txt, false, Gtk::MESSAGE_INFO);
527            msg.run();
528      }      }
529  }  }
530    
# Line 553  void DimensionManager::addDimension() { Line 581  void DimensionManager::addDimension() {
581          table.attach(spinZones, 1, 2, 1, 2);          table.attach(spinZones, 1, 2, 1, 2);
582      }      }
583    
584      dialog.add_button(Gtk::Stock::OK, 0);      dialog.add_button(_("_OK"), 0);
585      dialog.add_button(Gtk::Stock::CANCEL, 1);      dialog.add_button(_("_Cancel"), 1);
586      dialog.show_all_children();      dialog.show_all_children();
587    
588      if (!dialog.run()) { // OK selected ...      if (!dialog.run()) { // OK selected ...

Legend:
Removed from v.2641  
changed lines
  Added in v.3105

  ViewVC Help
Powered by ViewVC