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

List:       kde-commits
Subject:    KDE/kdesdk/kate
From:       Joseph Wenninger <kde () jowenn ! at>
Date:       2008-04-13 11:03:40
Message-ID: 1208084620.525247.28736.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 796339 by jowenn:

implement fix for bug #100979

 M  +45 -1     app/katefilelist.cpp  
 M  +15 -0     app/katefilelist.h  
 M  +9 -1      app/katemainwindow.cpp  
 M  +1 -0      app/katemainwindow.h  
 M  +18 -11    app/kateviewmanager.cpp  
 M  +1 -0      app/kateviewmanager.h  
 M  +2 -2      data/kateui.rc  


--- trunk/KDE/kdesdk/kate/app/katefilelist.cpp #796338:796339
@@ -36,7 +36,7 @@
 #include <QtGui/QVBoxLayout>
 #include <QtGui/QGridLayout>
 #include <QtGui/QGroupBox>
-
+#include <QContextMenuEvent>
 #include <kdebug.h>
 //END Includes
 
@@ -48,6 +48,14 @@
   m_windowNext = actionCollection->addAction(KStandardAction::Back, this, \
SLOT(slotPrevDocument()));  m_windowPrev = \
actionCollection->addAction(KStandardAction::Forward, this, \
SLOT(slotNextDocument()));  
+  m_filelistCloseDocument=actionCollection->addAction( KStandardAction::Close, \
"filelist_close", this, SLOT( slotDocumentClose() ) ); +  \
m_filelistCloseDocument->setWhatsThis(i18n("Close the current document.")); +
+  m_filelistCloseDocumentOther = actionCollection->addAction( "filelist_close_other" \
); +  m_filelistCloseDocumentOther->setText( i18n( "Close Other" ) );
+  connect( m_filelistCloseDocumentOther, SIGNAL( triggered() ), this, SLOT( \
slotDocumentCloseOther() ) ); +  \
m_filelistCloseDocumentOther->setWhatsThis(i18n("Close other open documents.")); +
   m_sortAction = new KSelectAction( i18n("Sort &By"), this );
   actionCollection->addAction( "filelist_sortby", m_sortAction );
 
@@ -70,6 +78,42 @@
 KateFileList::~KateFileList()
 {}
 
+void KateFileList::mousePressEvent ( QMouseEvent * event ) {
+  m_previouslySelected = selectionModel()->currentIndex();
+  QListView::mousePressEvent(event);
+}
+
+void KateFileList::mouseReleaseEvent ( QMouseEvent * event ) {
+  kDebug()<<"KateFileList::mouseReleaseEvent";
+  m_previouslySelected = QModelIndex();
+  QListView::mouseReleaseEvent(event);
+}
+
+void KateFileList::contextMenuEvent ( QContextMenuEvent * event ) {
+  m_indexContextMenu=selectionModel()->currentIndex();
+  emit customContextMenuRequested(static_cast<QContextMenuEvent *>(event)->pos());
+  if (m_previouslySelected.isValid()) {
+    selectionModel()->select(m_previouslySelected,QItemSelectionModel::SelectCurrent);
 +    selectionModel()->setCurrentIndex(m_previouslySelected,QItemSelectionModel::SelectCurrent);
 +  }
+  event->accept();
+}
+
+void KateFileList::slotDocumentClose() {
+  m_previouslySelected = QModelIndex();
+  QVariant v = m_indexContextMenu.data(KateDocManager::DocumentRole);
+  if (!v.isValid()) return;
+  emit closeDocument(v.value<KTextEditor::Document*>());
+}
+
+void KateFileList::slotDocumentCloseOther() {
+  QVariant v = m_indexContextMenu.data(KateDocManager::DocumentRole);
+  if (!v.isValid()) return;
+  m_previouslySelected = m_indexContextMenu;
+  emit closeOtherDocument(v.value<KTextEditor::Document*>());
+}
+
+
 void KateFileList::setSortRole(int role)
 {
   if (model())
--- trunk/KDE/kdesdk/kate/app/katefilelist.h #796338:796339
@@ -60,14 +60,29 @@
   private:
     QAction* m_windowNext;
     QAction* m_windowPrev;
+    QAction* m_filelistCloseDocument;
+    QAction* m_filelistCloseDocumentOther;
     KSelectAction* m_sortAction;
+    QPersistentModelIndex m_previouslySelected;
+    QPersistentModelIndex m_indexContextMenu;
     int m_sortType;
 
   public Q_SLOTS:
     void slotNextDocument();
     void slotPrevDocument();
+    void slotDocumentClose();
+    void slotDocumentCloseOther();
     void setSortRole(int role);
     void setSortRoleFromAction(QAction*);
+
+  protected:
+    virtual void mousePressEvent ( QMouseEvent * event );
+    virtual void mouseReleaseEvent ( QMouseEvent * event );
+    virtual void contextMenuEvent ( QContextMenuEvent * event );
+
+  Q_SIGNALS:
+    void closeDocument(KTextEditor::Document*);
+    void closeOtherDocument(KTextEditor::Document*);
 };
 
 class KateFileListConfigPage : public QWidget {
--- trunk/KDE/kdesdk/kate/app/katemainwindow.cpp #796338:796339
@@ -241,7 +241,8 @@
   connect(m_fileList, SIGNAL(activated(const QModelIndex&)), m_documentModel, \
SLOT(opened(const QModelIndex&)));  connect(m_fileList, SIGNAL(activated(const \
QModelIndex&)), m_viewManager, SLOT(activateDocument(const QModelIndex &)));  \
connect(m_fileList, SIGNAL(customContextMenuRequested(const QPoint &)), this, \
                SLOT(showFileListPopup(const QPoint&)));
-  m_fileList->setContextMenuPolicy(Qt::CustomContextMenu);
+  connect(m_fileList, \
SIGNAL(closeDocument(KTextEditor::Document*)),m_viewManager,SLOT(slotDocumentClose(KTextEditor::Document*)));
 +  connect(m_fileList, \
SIGNAL(closeOtherDocument(KTextEditor::Document*)),this,SLOT(slotDocumentCloseOther(KTextEditor::Document*)));
  //filelist = new KateFileList (this, m_viewManager, ft);
 //   m_fileList->readConfig(KConfigGroup(KGlobal::config(), "FileList"));
 
@@ -382,6 +383,13 @@
     KateDocManager::self()->closeAllDocuments(false);
 }
 
+
+void KateMainWindow::slotDocumentCloseOther(KTextEditor::Document *document)
+{
+  if (queryClose_internal(document))
+    KateDocManager::self()->closeOtherDocuments(document);
+}
+
 void KateMainWindow::slotDocumentCloseOther()
 {
   if (queryClose_internal(m_viewManager->activeView()->document()))
--- trunk/KDE/kdesdk/kate/app/katemainwindow.h #796338:796339
@@ -221,6 +221,7 @@
   private Q_SLOTS:
     void slotDocumentCloseAll();
     void slotDocumentCloseOther();
+    void slotDocumentCloseOther(KTextEditor::Document *document);
     void slotDocModified(KTextEditor::Document *document);
   private:
     static uint uniqueID;
--- trunk/KDE/kdesdk/kate/app/kateviewmanager.cpp #796338:796339
@@ -186,26 +186,33 @@
   }
 }
 
-void KateViewManager::slotDocumentClose ()
-{
-  // no active view, do nothing
-  if (!activeView()) return;
-
-  // prevent close document if only one view alive and the document of
+void KateViewManager::slotDocumentClose(KTextEditor::Document *document) {
+// prevent close document if only one view alive and the document of
   // it is not modified and empty !!!
   if ( (KateDocManager::self()->documents() == 1)
-       && !activeView()->document()->isModified()
-       && activeView()->document()->url().isEmpty()
-       && activeView()->document()->documentEnd() == KTextEditor::Cursor::start() )
+       && !document->isModified()
+       && document->url().isEmpty()
+       && document->documentEnd() == KTextEditor::Cursor::start() )
   {
-    activeView()->document()->closeUrl();
+    document->closeUrl();
     return;
   }
 
   // close document
-  KateDocManager::self()->closeDocument \
((KTextEditor::Document*)activeView()->document()); +  \
KateDocManager::self()->closeDocument (document);  }
 
+
+void KateViewManager::slotDocumentClose ()
+{
+  // no active view, do nothing
+  if (!activeView()) return;
+
+  slotDocumentClose(activeView()->document());
+
+  
+}
+
 KTextEditor::Document *KateViewManager::openUrl (const KUrl &url, const QString& \
encoding, bool activate, bool isTempFile)  {
   KTextEditor::Document *doc = KateDocManager::self()->openUrl (url, encoding, \
                isTempFile);
--- trunk/KDE/kdesdk/kate/app/kateviewmanager.h #796338:796339
@@ -91,6 +91,7 @@
     void slotDocumentNew ();
     void slotDocumentOpen ();
     void slotDocumentClose ();
+    void slotDocumentClose (KTextEditor::Document *document);
 
     void setActiveSpace ( KateViewSpace* vs );
     void setActiveView ( KTextEditor::View* view );
--- trunk/KDE/kdesdk/kate/data/kateui.rc #796338:796339
@@ -160,8 +160,8 @@
   <Separator/>
   <DefineGroup name="print_merge" />
   <Separator/>
-  <Action name="file_close"/>
-  <Action name="file_close_other"/>
+  <Action name="filelist_close"/>
+  <Action name="filelist_close_other"/>
   <Action name="file_close_all"/>
   <Separator/>
   <Action name="filelist_sortby"/>


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

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