[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdeutils/okteta/libs/kasten
From:       Friedrich W. H. Kossebau <kossebau () kde ! org>
Date:       2009-08-06 16:42:51
Message-ID: 1249576971.290751.3943.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1007989 by kossebau:

changed: now that groups of documents are handled, also emit signals for the whole \
groups instead of each single document

 M  +10 -9     controllers/documentsystem/documentsbrowser/documentlistmodel.cpp  
 M  +2 -2      controllers/documentsystem/documentsbrowser/documentlistmodel.h  
 M  +4 -2      controllers/documentsystem/documentsbrowser/documentstool.cpp  
 M  +2 -2      controllers/documentsystem/documentsbrowser/documentstool.h  
 M  +50 -4     core/system/documentmanager.cpp  
 M  +9 -4      core/system/documentmanager.h  


--- trunk/KDE/kdeutils/okteta/libs/kasten/controllers/documentsystem/documentsbrowser/documentlistmodel.cpp \
#1007988:1007989 @@ -38,10 +38,10 @@
  : QAbstractTableModel( parent ),
    mDocumentsTool( documentsTool )
 {
-    connect( mDocumentsTool, SIGNAL(documentAdded( Kasten::AbstractDocument* )),
-             SLOT(onDocumentAdded( Kasten::AbstractDocument* )) );
-    connect( mDocumentsTool, SIGNAL(documentClosing( Kasten::AbstractDocument* )),
-             SLOT(onDocumentClosing( Kasten::AbstractDocument* )) );
+    connect( mDocumentsTool, SIGNAL(documentsAdded( const \
QList<Kasten::AbstractDocument*>& )), +             SLOT(onDocumentsAdded( const \
QList<Kasten::AbstractDocument*>& )) ); +    connect( mDocumentsTool, \
SIGNAL(documentsClosing( const QList<Kasten::AbstractDocument*>& )), +             \
                SLOT(onDocumentsClosing( const QList<Kasten::AbstractDocument*>& )) \
                );
     connect( mDocumentsTool, SIGNAL(focussedDocumentChanged( \
                Kasten::AbstractDocument* )),
              SLOT(onFocussedDocumentChanged( Kasten::AbstractDocument* )) );
 }
@@ -142,17 +142,18 @@
 #endif
 }
 
-void DocumentListModel::onDocumentAdded( AbstractDocument* document )
+void DocumentListModel::onDocumentsAdded( const QList<Kasten::AbstractDocument*>& \
documents )  {
-    connect( document, SIGNAL(modified( \
                Kasten::AbstractDocument::SynchronizationStates )),
-             SLOT(onModifiedChanged()) );
+    foreach( AbstractDocument* document, documents )
+        connect( document, SIGNAL(modified( \
Kasten::AbstractDocument::SynchronizationStates )), +                 \
                SLOT(onModifiedChanged()) );
     // TODO: try to understand how this whould be done with \
{begin,end}{Insert,Remove}Columns  reset();
 }
 
-void DocumentListModel::onDocumentClosing( AbstractDocument* document )
+void DocumentListModel::onDocumentsClosing( const QList<Kasten::AbstractDocument*>& \
documents )  {
-Q_UNUSED( document )
+Q_UNUSED( documents )
     // TODO: try to understand how this whould be done with \
{begin,end}{Insert,Remove}Columns  reset();
 }
--- trunk/KDE/kdeutils/okteta/libs/kasten/controllers/documentsystem/documentsbrowser/documentlistmodel.h \
#1007988:1007989 @@ -58,8 +58,8 @@
     virtual QVariant headerData( int section, Qt::Orientation orientation, int role \
) const;  
   protected Q_SLOTS:
-    void onDocumentAdded( Kasten::AbstractDocument* document );
-    void onDocumentClosing( Kasten::AbstractDocument* document );
+    void onDocumentsAdded( const QList<Kasten::AbstractDocument*>& documents );
+    void onDocumentsClosing( const QList<Kasten::AbstractDocument*>& documents );
     void onFocussedDocumentChanged( Kasten::AbstractDocument* document );
     void onModifiedChanged();
 
--- trunk/KDE/kdeutils/okteta/libs/kasten/controllers/documentsystem/documentsbrowser/documentstool.cpp \
#1007988:1007989 @@ -37,8 +37,10 @@
 {
     setObjectName( "Documents" );
 
-    connect( mDocumentManager, SIGNAL(added( Kasten::AbstractDocument* )), \
                SIGNAL(documentAdded( Kasten::AbstractDocument* )) );
-    connect( mDocumentManager, SIGNAL(closing( Kasten::AbstractDocument* )), \
SIGNAL(documentClosing( Kasten::AbstractDocument* )) ); +    connect( \
mDocumentManager, SIGNAL(added( const QList<Kasten::AbstractDocument*>& )), +         \
SIGNAL(documentsAdded( const QList<Kasten::AbstractDocument*>& )) ); +    connect( \
mDocumentManager, SIGNAL(closing( const QList<Kasten::AbstractDocument*>& )), +       \
SIGNAL(documentsClosing( const QList<Kasten::AbstractDocument*>& )) );  }
 
 QList<AbstractDocument*> DocumentsTool::documents() const { return \
                mDocumentManager->documents(); }
--- trunk/KDE/kdeutils/okteta/libs/kasten/controllers/documentsystem/documentsbrowser/documentstool.h \
#1007988:1007989 @@ -55,8 +55,8 @@
     virtual void setTargetModel( AbstractModel* model );
 
   Q_SIGNALS:
-    void documentAdded( Kasten::AbstractDocument* document );
-    void documentClosing( Kasten::AbstractDocument* document );
+    void documentsAdded( const QList<Kasten::AbstractDocument*>& documents );
+    void documentsClosing( const QList<Kasten::AbstractDocument*>& documents );
     void focussedDocumentChanged( Kasten::AbstractDocument* document );
 
   protected: // sources
--- trunk/KDE/kdeutils/okteta/libs/kasten/core/system/documentmanager.cpp \
#1007988:1007989 @@ -80,7 +80,9 @@
     document->setId( QString::number(++lastDocumentId) );
     mList.append( document );
     // TODO: only emit if document was not included before
-    emit added( document );
+    QList<AbstractDocument*> addedDocuments;
+    addedDocuments.append( document );
+    emit added( addedDocuments );
 }
 
 void DocumentManager::closeDocument( AbstractDocument* document )
@@ -92,19 +94,46 @@
     // TODO: first check if unsaved and ask, only then close
 
         iterator.remove();
-        emit closing( document );
+
+        QList<AbstractDocument*> closedDocuments;
+        closedDocuments.append( document );
+        emit closing( closedDocuments );
+
         delete document;
     }
 }
 
 void DocumentManager::closeAll()
 {
-    foreach( AbstractDocument* document, mList )
+    // TODO: is it better for remove the document from the list before emitting \
closing(document)? +    // TODO: or better emit close(documentList)? who would use \
this? +    QList<AbstractDocument*> closedDocuments = mList;
+    mList.clear();
+
+    emit closing( closedDocuments );
+
+    foreach( AbstractDocument* document, closedDocuments )
     {
-        emit closing( document );
         delete document;
     }
+}
+
+void DocumentManager::closeAllOther( AbstractDocument* keptDocument )
+{
+    // TODO: is it better for remove the document from the list before emitting \
closing(document)? +    // TODO: or better emit close(documentList)? who would use \
this? +    QList<AbstractDocument*> closedDocuments = mList;
+    closedDocuments.removeOne( keptDocument );
+
     mList.clear();
+    mList.append( keptDocument );
+
+    emit closing( closedDocuments );
+
+    foreach( AbstractDocument* document, closedDocuments )
+    {
+        delete document;
+    }
 }
 
 bool DocumentManager::canClose( AbstractDocument* document )
@@ -128,6 +157,23 @@
     return canCloseAll;
 }
 
+bool DocumentManager::canCloseAllOther( AbstractDocument* keptDocument )
+{
+    bool canCloseAll = true;
+
+    foreach( AbstractDocument* document, mList )
+    {
+        if( ( document != keptDocument ) &&
+            ! mSyncManager->canClose(document) )
+        {
+            canCloseAll = false;
+            break;
+        }
+    }
+
+    return canCloseAll;
+}
+
 void DocumentManager::requestFocus( AbstractDocument* document )
 {
     emit focusRequested( document );
--- trunk/KDE/kdeutils/okteta/libs/kasten/core/system/documentmanager.h \
#1007988:1007989 @@ -53,12 +53,16 @@
 
   public:
     void addDocument( AbstractDocument* document );
+
     void closeDocument( AbstractDocument* document );
     void closeAll();
+// TODO: think about if a more general close( documentList, theseOrOthers ) is \
better, same with canCloseAllOther() +    void closeAllOther( AbstractDocument* \
document );  
     // TODO: what to do for documents not added?
     bool canClose( AbstractDocument* document );
     bool canCloseAll();
+    bool canCloseAllOther( AbstractDocument* document );
 
     void requestFocus( AbstractDocument* document );
 
@@ -75,10 +79,11 @@
     ModelCodecManager* codecManager();
 
   Q_SIGNALS:
-    // document got added
-    void added( Kasten::AbstractDocument* document );
-    /// document is about to be closed, cannot be stopped
-    void closing( Kasten::AbstractDocument* document );
+    // documents got added
+    void added( const QList<Kasten::AbstractDocument*>& documents );
+    /// documents are about to be closed, cannot be stopped
+    void closing( const QList<Kasten::AbstractDocument*>& documents );
+
 //     void closing( KCloseEvent *event );
 // TODO: other than QObject event gets modified by observers, take care of unsetting \
a close cancel  // problem with a signal is that all(!) observers get notified, even \
if event is already cancelled


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic