--- gigedit/trunk/src/gigedit/dimensionmanager.cpp 2007/10/12 17:46:29 1411 +++ gigedit/trunk/src/gigedit/dimensionmanager.cpp 2008/02/10 08:50:35 1677 @@ -1,5 +1,5 @@ /* -*- c++ -*- - * Copyright (C) 2006, 2007 Andreas Persson + * Copyright (C) 2006-2008 Andreas Persson * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -218,15 +218,18 @@ // update all GUI elements according to current gig::Region informations void DimensionManager::refreshManager() { refTableModel->clear(); - for (int i = 0; i < region->Dimensions; i++) { - gig::dimension_def_t* dim = ®ion->pDimensionDefinitions[i]; - Gtk::TreeModel::Row row = *(refTableModel->append()); - row[tableModel.m_dim_type] = __dimTypeAsString(dim->dimension); - row[tableModel.m_bits] = dim->bits; - row[tableModel.m_zones] = 1 << dim->bits; //TODO: for now we calculate it here until libgig always ensures 'zones' to be correct - row[tableModel.m_description] = __dimDescriptionAsString(dim->dimension); - row[tableModel.m_definition] = dim; + if (region) { + for (int i = 0; i < region->Dimensions; i++) { + gig::dimension_def_t* dim = ®ion->pDimensionDefinitions[i]; + Gtk::TreeModel::Row row = *(refTableModel->append()); + row[tableModel.m_dim_type] = __dimTypeAsString(dim->dimension); + row[tableModel.m_bits] = dim->bits; + row[tableModel.m_zones] = 1 << dim->bits; //TODO: for now we calculate it here until libgig always ensures 'zones' to be correct + row[tableModel.m_description] = __dimDescriptionAsString(dim->dimension); + row[tableModel.m_definition] = dim; + } } + set_sensitive(region); } void DimensionManager::show(gig::Region* region) { @@ -236,6 +239,11 @@ deiconify(); } +void DimensionManager::set_region(gig::Region* region) { + this->region = region; + refreshManager(); +} + void DimensionManager::addDimension() { try { Gtk::Dialog dialog("New Dimension", true /*modal*/); @@ -315,10 +323,10 @@ Gtk::TreeModel::Row row = *it; gig::dimension_def_t* dim = row[tableModel.m_definition]; region->DeleteDimension(dim); - // remove respective row from table - refTableModel->erase(it); // let everybody know there was a change region_changed_signal.emit(region); + // update all GUI elements + refreshManager(); } catch (RIFF::Exception e) { // notify that the changes are over (i.e. to avoid dead locks) region_changed_signal.emit(region);