[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