--- gigedit/trunk/src/gigedit/dimensionmanager.h 2007/09/04 11:04:56 1322 +++ gigedit/trunk/src/gigedit/dimensionmanager.h 2017/11/14 18:07:25 3364 @@ -1,5 +1,5 @@ /* -*- c++ -*- - * Copyright (C) 2006, 2007 Andreas Persson + * Copyright (C) 2006 - 2017 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 @@ -20,6 +20,9 @@ #ifndef GIGEDIT_DIMENSIONMANAGER_H #define GIGEDIT_DIMENSIONMANAGER_H +#include "compat.h" +#include +#include #include #include #include @@ -27,40 +30,99 @@ #include #include #include +#include -#include +#ifdef LIBGIG_HEADER_FILE +# include LIBGIG_HEADER_FILE(gig.h) +#else +# include +#endif -class DimensionManager : public Gtk::Window { +#include +#include "ManagedWindow.h" + +class DimTypeCellRenderer : public Gtk::CellRendererText { +public: + Glib::PropertyProxy propertyDimType() { + return m_propertyDimType.get_proxy(); + } + + Glib::PropertyProxy propertyUsageCount() { + return m_propertyUsageCount.get_proxy(); + } + + Glib::PropertyProxy propertyTotalRegions() { + return m_propertyTotalRegions.get_proxy(); + } + + DimTypeCellRenderer(); +protected: + void typeChanged(); + void statsChanged(); +private: + Glib::Property m_propertyDimType; + Glib::Property m_propertyUsageCount; + Glib::Property m_propertyTotalRegions; +}; + +class IntSetCellRenderer : public Gtk::CellRendererText { +public: + Glib::PropertyProxy > propertyValue() { + return m_propertyValue.get_proxy(); + } + + IntSetCellRenderer(); +protected: + void valueChanged(); +private: + Glib::Property > m_propertyValue; +}; + +class DimensionManager : public ManagedWindow { public: sigc::signal region_to_be_changed_signal; sigc::signal region_changed_signal; DimensionManager(); void show(gig::Region* region); + void set_region(gig::Region* region); + + // implementation for abstract methods of interface class "ManagedWindow" + virtual Settings::Property* windowSettingX() { return &Settings::singleton()->dimensionManagerWindowX; } + virtual Settings::Property* windowSettingY() { return &Settings::singleton()->dimensionManagerWindowY; } + virtual Settings::Property* windowSettingWidth() { return &Settings::singleton()->dimensionManagerWindowW; } + virtual Settings::Property* windowSettingHeight() { return &Settings::singleton()->dimensionManagerWindowH; } + protected: gig::Region* region; - Gtk::VBox vbox; - Gtk::HButtonBox buttonBox; + VBox vbox; + HButtonBox buttonBox; Gtk::ScrolledWindow scrolledWindow; Gtk::TreeView treeView; Gtk::Button addButton; Gtk::Button removeButton; + Gtk::CheckButton allRegionsCheckBox; + + DimTypeCellRenderer m_cellRendererDimType; + IntSetCellRenderer m_cellRendererIntSet; class ModelColumns : public Gtk::TreeModel::ColumnRecord { public: ModelColumns() { - add(m_dim_type); + add(m_type); add(m_bits); add(m_zones); add(m_description); - add(m_definition); + add(m_usageCount); + add(m_totalRegions); } - Gtk::TreeModelColumn m_dim_type; - Gtk::TreeModelColumn m_bits; - Gtk::TreeModelColumn m_zones; + Gtk::TreeModelColumn m_type; + Gtk::TreeModelColumn > m_bits; + Gtk::TreeModelColumn > m_zones; Gtk::TreeModelColumn m_description; - Gtk::TreeModelColumn m_definition; + Gtk::TreeModelColumn m_usageCount; + Gtk::TreeModelColumn m_totalRegions; } tableModel; class ComboModelColumns : public Gtk::TreeModel::ColumnRecord { @@ -75,10 +137,14 @@ } comboModel; Glib::RefPtr refTableModel; + bool ignoreColumnClicked; //HACK: Prevents that onColumnClicked() gets called multiple times or at times where it is not desired + void onAllRegionsCheckBoxToggled(); + void onColumnClicked(); void refreshManager(); void addDimension(); void removeDimension(); + bool allRegions() const; }; #endif // GIGEDIT_DIMENSIONMANAGER_H