From b808b7ef2a5e246af5551a0fa6832538dae984d2 Mon Sep 17 00:00:00 2001 From: Jim Evins Date: Sun, 24 Nov 2013 23:55:32 -0500 Subject: [PATCH] Adding more methods to LabelModel. --- app/LabelModel.cpp | 155 ++++++++++++++++++++-------------- app/LabelModel.h | 202 +++++---------------------------------------- app/LabelRegion.h | 24 +++--- 3 files changed, 127 insertions(+), 254 deletions(-) diff --git a/app/LabelModel.cpp b/app/LabelModel.cpp index d3c57de..6a6ee69 100644 --- a/app/LabelModel.cpp +++ b/app/LabelModel.cpp @@ -20,13 +20,16 @@ #include "LabelModel.h" +#include + + namespace glabels { /** * Default constructor. */ - LabelModel::LabelModel() + LabelModel::LabelModel() : mModified(true) { } @@ -36,17 +39,46 @@ namespace glabels */ void LabelModel::addItem( LabelModelItem *item ) { + item->setParent( this ); mItemList << item; + connect( item, SIGNAL(changed()), this, SLOT(itemChanged(LabelModelItem*)) ); + connect( item, SIGNAL(moved()), this, SLOT(itemMoved(LabelModelItem*)) ); + + mModified = true; + emit itemAdded( item ); + emit changed(); + } + + + void LabelModel::itemChanged( LabelModelItem *item ) + { + mModified = true; + + emit changed(); + } + + + void LabelModel::itemMoved( LabelModelItem *item ) + { + mModified = true; + + emit changed(); } void LabelModel::deleteItem( LabelModelItem *item ) { + item->unselect(); mItemList.removeOne( item ); + disconnect( item, 0, this, 0 ); + + mModified = true; + emit itemDeleted( item ); + emit changed(); } @@ -75,7 +107,7 @@ namespace glabels /** * Select all items. */ - void LabelModel::selectAll( void ) + void LabelModel::selectAll() { foreach ( LabelModelItem *item, mItemList ) { @@ -89,7 +121,7 @@ namespace glabels /** * Unselect item all items. */ - void LabelModel::unselectAll( void ) + void LabelModel::unselectAll() { foreach ( LabelModelItem *item, mItemList ) { @@ -100,6 +132,64 @@ namespace glabels } + void LabelModel::selectRegion( const LabelRegion ®ion ) + { + double rX1 = std::min( region.x1(), region.x2() ); + double rY1 = std::min( region.y1(), region.y2() ); + double rX2 = std::max( region.x1(), region.x2() ); + double rY2 = std::max( region.y1(), region.y2() ); + + foreach ( LabelModelItem *item, mItemList ) + { + LabelRegion itemExtent = item->getExtent(); + + if ( (itemExtent.x1() >= rX1) && + (itemExtent.x2() <= rX2) && + (itemExtent.y1() >= rY1) && + (itemExtent.y2() <= rY2) ) + { + item->select(); + } + } + + emit selectionChanged(); + } + + + bool LabelModel::isSelectionEmpty() + { + foreach ( LabelModelItem *item, mItemList ) + { + if ( item->isSelected() ) + { + return false; + } + } + + return true; + } + + + bool LabelModel::isSelectionAtomic() + { + int nSelected = 0; + + foreach ( LabelModelItem *item, mItemList ) + { + if ( item->isSelected() ) + { + nSelected++; + if ( nSelected > 1 ) + { + return false; + } + } + } + + return (nSelected == 1); + } + + QList LabelModel::getSelection() { QList selectedList; @@ -124,11 +214,11 @@ namespace glabels deleteItem( item ); } + mModified = true; + emit selectionChanged(); } - - } /////////////////////////////////////////////////////////////////////////////// @@ -524,61 +614,6 @@ namespace qtLabels } - public void select_region( LabelRegion region ) - { - double r_x1 = double.min( region.x1, region.x2 ); - double r_y1 = double.min( region.y1, region.y2 ); - double r_x2 = double.max( region.x1, region.x2 ); - double r_y2 = double.max( region.y1, region.y2 ); - - foreach ( LabelObject object in object_list ) - { - LabelRegion obj_extent = object.get_extent(); - - if ( (obj_extent.x1 >= r_x1) && - (obj_extent.x2 <= r_x2) && - (obj_extent.y1 >= r_y1) && - (obj_extent.y2 <= r_y2) ) - { - object.select(); - } - } - selection_changed(); - } - - - public bool is_selection_empty() - { - foreach ( LabelObject object in object_list ) - { - if ( object.is_selected() ) - { - return false; - } - } - return true; - } - - - public bool is_selection_atomic() - { - int n_selected = 0; - - foreach ( LabelObject object in object_list ) - { - if ( object.is_selected() ) - { - n_selected++; - if ( n_selected > 1 ) - { - return false; - } - } - } - return (n_selected == 1); - } - - public LabelObject? get_1st_selected_object() { foreach ( LabelObject object in object_list ) diff --git a/app/LabelModel.h b/app/LabelModel.h index 07f5aa3..dbc52d3 100644 --- a/app/LabelModel.h +++ b/app/LabelModel.h @@ -39,11 +39,16 @@ namespace glabels virtual ~LabelModel() {} signals: + void changed(); void selectionChanged(); void itemAdded( LabelModelItem *item ); void itemDeleted( LabelModelItem *item ); public: + Q_PROPERTY( bool modified READ isModified ); + bool isModified( void ) const { return mModified; } + + void addItem( LabelModelItem *item ); void deleteItem( LabelModelItem *item ); @@ -53,9 +58,15 @@ namespace glabels void unselectItem( LabelModelItem *item ); - void selectAll( void ); + void selectAll(); - void unselectAll( void ); + void unselectAll(); + + void selectRegion( const LabelRegion ®ion ); + + bool isSelectionEmpty(); + + bool isSelectionAtomic(); QList getSelection(); @@ -64,9 +75,16 @@ namespace glabels void deleteSelection(); + private slots: + void itemChanged( LabelModelItem *item ); + void itemMoved( LabelModelItem *item ); + + private: QList mItemList; + + bool mModified; }; @@ -338,192 +356,12 @@ namespace qtLabels } - public void add_object( LabelObject object ) - { - object.parent = this; - object_list.append( object ); - - object.changed.connect( on_object_changed ); - object.moved.connect( on_object_moved ); - - changed(); - modified = true; - } - - - public void delete_object( LabelObject object ) - { - unselect_object( object ); - - object_list.remove( object ); - - object.changed.disconnect( on_object_changed ); - object.moved.disconnect( on_object_moved ); - - changed(); - modified = true; - } - - - private void on_object_changed() - { - schedule_or_emit_changed_signal(); - } - - - private void on_object_moved() - { - schedule_or_emit_changed_signal(); - } - - private void on_merge_source_changed() { changed(); } - public void draw( Cairo.Context cr, - bool in_editor, - MergeRecord? record ) - { - foreach ( LabelObject object in object_list ) - { - object.draw( cr, in_editor, record ); - } - } - - - public LabelObject? object_at( Cairo.Context cr, - double x_pixels, - double y_pixels ) - { - for ( unowned List? p = object_list.last(); p != null; p = p.prev ) - { - LabelObject object = p.data; - - if ( object.is_located_at( cr, x_pixels, y_pixels ) ) - { - return object; - } - } - - return null; - } - - - public Handle? handle_at( Cairo.Context cr, - double x_pixels, - double y_pixels ) - { - for ( unowned List? p = object_list.last(); p != null; p = p.prev ) - { - LabelObject object = p.data; - - if ( object.is_selected() ) - { - Handle? handle = object.handle_at( cr, x_pixels, y_pixels ); - - if ( handle != null ) - { - return handle; - } - } - } - - return null; - } - - - public void select_object( LabelObject object ) - { - object.select(); - selection_changed(); - } - - - public void unselect_object( LabelObject object ) - { - object.unselect(); - selection_changed(); - } - - - public void select_all() - { - foreach ( LabelObject object in object_list ) - { - object.select(); - } - selection_changed(); - } - - - public void unselect_all() - { - foreach ( LabelObject object in object_list ) - { - object.unselect(); - } - selection_changed(); - } - - - public void select_region( LabelRegion region ) - { - double r_x1 = double.min( region.x1, region.x2 ); - double r_y1 = double.min( region.y1, region.y2 ); - double r_x2 = double.max( region.x1, region.x2 ); - double r_y2 = double.max( region.y1, region.y2 ); - - foreach ( LabelObject object in object_list ) - { - LabelRegion obj_extent = object.get_extent(); - - if ( (obj_extent.x1 >= r_x1) && - (obj_extent.x2 <= r_x2) && - (obj_extent.y1 >= r_y1) && - (obj_extent.y2 <= r_y2) ) - { - object.select(); - } - } - selection_changed(); - } - - - public bool is_selection_empty() - { - foreach ( LabelObject object in object_list ) - { - if ( object.is_selected() ) - { - return false; - } - } - return true; - } - - - public bool is_selection_atomic() - { - int n_selected = 0; - - foreach ( LabelObject object in object_list ) - { - if ( object.is_selected() ) - { - n_selected++; - if ( n_selected > 1 ) - { - return false; - } - } - } - return (n_selected == 1); - } - - public LabelObject? get_1st_selected_object() { foreach ( LabelObject object in object_list ) diff --git a/app/LabelRegion.h b/app/LabelRegion.h index 637ccb0..62675e1 100644 --- a/app/LabelRegion.h +++ b/app/LabelRegion.h @@ -28,24 +28,24 @@ namespace glabels struct LabelRegion { public: - inline double x1( void ) { return m_x1; } - inline void x1( double value ) { m_x1 = value; } + inline double x1( void ) const { return mX1; } + inline void x1( double value ) { mX1 = value; } - inline double y1( void ) { return m_y1; } - inline void y1( double value ) { m_y1 = value; } + inline double y1( void ) const { return mY1; } + inline void y1( double value ) { mY1 = value; } - inline double x2( void ) { return m_x2; } - inline void x2( double value ) { m_x2 = value; } + inline double x2( void ) const { return mX2; } + inline void x2( double value ) { mX2 = value; } - inline double y2( void ) { return m_y2; } - inline void y2( double value ) { m_y2 = value; } + inline double y2( void ) const { return mY2; } + inline void y2( double value ) { mY2 = value; } private: - double m_x1; - double m_y1; - double m_x2; - double m_y2; + double mX1; + double mY1; + double mX2; + double mY2; }; }