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

List:       kde-commits
Subject:    KDE/kdesdk/lokalize/src
From:       Nickolai Shaforostoff <shafff () ukr ! net>
Date:       2009-05-25 23:48:52
Message-ID: 1243295332.256376.18287.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 972910 by shaforo:

BUG: 192992
do not unfuzzy plural messages so easily

the custom behaviour is there only for first edit (i.e. messages are unfuzzied easily \
after you edited all of them even if you make them fuzzy again), but I guess this is \
anough (and was easy to implement ;) )



 M  +2 -2      binunitsview.cpp  
 M  +1 -1      binunitsview.h  
 M  +14 -2     catalog/catalog.cpp  
 M  +2 -1      catalog/catalog.h  
 M  +2 -1      catalog/catalog_private.h  
 M  +2 -2      catalog/cmd.cpp  
 M  +9 -0      catalog/pos.h  
 M  +21 -7     xlifftextedit.cpp  
 M  +1 -0      xlifftextedit.h  


--- trunk/KDE/kdesdk/lokalize/src/binunitsview.cpp #972909:972910
@@ -169,7 +169,7 @@
     m_view->setRootIsDecorated(false);
     m_view->setAlternatingRowColors(true);
     m_view->viewport()->setBackgroundRole(QPalette::Background);
-    connect(m_view,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(mouseDoubleClickEvent(QModelIndex)));
 +    connect(m_view,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(mouseDoubleClicked(QModelIndex)));
  
     connect(catalog,SIGNAL(signalFileLoaded()),this,SLOT(fileLoaded()));
 }
@@ -218,7 +218,7 @@
     event->accept();
 }
 
-void BinUnitsView::mouseDoubleClickEvent(const QModelIndex& item)
+void BinUnitsView::mouseDoubleClicked(const QModelIndex& item)
 {
     //FIXME child processes don't notify us about changes ;(
     if (item.column()<BinUnitsModel::Approved)
--- trunk/KDE/kdesdk/lokalize/src/binunitsview.h #972909:972910
@@ -49,7 +49,7 @@
 private:
     void contextMenuEvent(QContextMenuEvent *event);
 private slots:
-    void mouseDoubleClickEvent(const QModelIndex&);
+    void mouseDoubleClicked(const QModelIndex&);
     void fileLoaded();
 
 private:
--- trunk/KDE/kdesdk/lokalize/src/catalog/catalog.cpp #972909:972910
@@ -830,7 +830,7 @@
     if (m_storage) m_storage->setEquivTrans(pos, equivTrans);
 }
 
-bool Catalog::setModified(int entry, bool modified)
+bool Catalog::setModified(DocPos entry, bool modified)
 {
     if (modified)
     {
@@ -843,11 +843,23 @@
     return true;
 }
 
-bool Catalog::isModified(int entry) const
+bool Catalog::isModified(DocPos entry) const
 {
     return d->_modifiedEntries.contains(entry);
 }
 
+bool Catalog::isModified(int entry) const
+{
+    if (!isPlural(entry))
+        return isModified(DocPos(entry,0));
+
+    int f=numberOfPluralForms();
+    while(--f>=0)
+        if (isModified(DocPos(entry,f)))
+            return true;
+    return false;
+}
+
 //END UNDO/REDO
 
 
--- trunk/KDE/kdesdk/lokalize/src/catalog/catalog.h #972909:972910
@@ -131,6 +131,7 @@
     ///@returns true if at least one form is untranslated
     bool isEmpty(uint index) const;
     bool isEmpty(const DocPosition&) const;
+    bool isModified(DocPos entry) const;
     bool isModified(int entry) const;
 
     /// so DocPosition::entry may actually be < size()+binUnitsCount()
@@ -221,7 +222,7 @@
     void setEquivTrans(const DocPosition&, bool equivTrans);
 
     /// @returns true if entry wasn't modified before
-    bool setModified(int entry, bool modif);
+    bool setModified(DocPos entry, bool modif);
 
 protected:
     CatalogPrivate *d;
--- trunk/KDE/kdesdk/lokalize/src/catalog/catalog_private.h #972909:972910
@@ -40,6 +40,7 @@
 #include "catalogitem.h"
 #include "projectlocal.h"
 #include "state.h"
+#include "pos.h"
 
 #include <kurl.h>
 #include <kautosavefile.h>
@@ -102,7 +103,7 @@
     //keeps pos of the entry that was last modified
     DocPosition _lastModifiedPos;
 
-    QSet<int> _modifiedEntries;//just for the nice gui
+    QSet<DocPos> _modifiedEntries;//just for the nice gui
 
     QString _phase;
     ProjectLocal::PersonRole _phaseRole;
--- trunk/KDE/kdesdk/lokalize/src/catalog/cmd.cpp #972909:972910
@@ -52,7 +52,7 @@
 {
     setJumpingPos();
     doRedo();
-    _firstModificationForThisEntry=_catalog->setModified(_pos.entry,true);
+    _firstModificationForThisEntry=_catalog->setModified(DocPos(_pos),true);
     _prevPhase=setPhaseForPart(_catalog,_catalog->activePhase(),_pos,DocPosition::UndefPart);
  }
 
@@ -61,7 +61,7 @@
     setJumpingPos();
     doUndo();
     if (_firstModificationForThisEntry)
-        _catalog->setModified(_pos.entry,false);
+        _catalog->setModified(DocPos(_pos),false);
     setPhaseForPart(_catalog,_prevPhase,_pos,DocPosition::UndefPart);
 }
 
--- trunk/KDE/kdesdk/lokalize/src/catalog/pos.h #972909:972910
@@ -25,6 +25,7 @@
 #define POS_H
 
 #include <QMetaType>
+#include <QHash>
 
 class Catalog;
 
@@ -106,4 +107,12 @@
 
 };
 
+
+inline uint qHash(const DocPos &key)
+{
+    return qHash((key.entry<<8)|key.form);
+}
+
+
+
 #endif
--- trunk/KDE/kdesdk/lokalize/src/xlifftextedit.cpp #972909:972910
@@ -385,8 +385,7 @@
         else _leds->ledUntr->off();
     }
 */
-    if (!m_catalog->isApproved(m_currentPos.entry)&&Settings::autoApprove())
-        emit toggleApprovementRequested();
+    requestToggleApprovement();
     reflectUntranslatedState();
 
     // for mergecatalog (remove entry from index)
@@ -404,8 +403,7 @@
     if (!::removeTargetSubstring(m_catalog, m_currentPos, delStart, delLen))
         return false;
 
-    if (!m_catalog->isApproved(m_currentPos.entry))
-        emit toggleApprovementRequested();
+    requestToggleApprovement();
 
     if (refresh)
     {
@@ -632,7 +630,7 @@
         if (KDE_ISUNLIKELY( !m_catalog->isApproved(m_currentPos.entry) && \
                !textCursor().hasSelection() )
                             && \
                ((textCursor().atStart()&&keyEvent->key()==Qt::Key_Backspace)
                                  \
                ||(textCursor().atEnd()&&keyEvent->key()==Qt::Key_Delete) ))
-            emit toggleApprovementRequested();
+            requestToggleApprovement();
         else
             KTextEdit::keyPressEvent(keyEvent);
     }
@@ -1003,8 +1001,7 @@
 
         showPos(m_currentPos,sourceWithTags,/*keepCursor*/false);
 
-        if (KDE_ISUNLIKELY( \
                !m_catalog->isApproved(pos.entry)&&Settings::autoApprove() ))
-            emit toggleApprovementRequested();
+        requestToggleApprovement();
     }
     else
     {
@@ -1015,7 +1012,24 @@
     }
 }
 
+void XliffTextEdit::requestToggleApprovement()
+{
+    if (m_catalog->isApproved(m_currentPos.entry)||!Settings::autoApprove())
+        return;
 
+    bool skip=m_catalog->isPlural(m_currentPos);
+    if (skip)
+    {
+        skip=false;
+        DocPos pos(m_currentPos);
+        for (pos.form=0;pos.form<m_catalog->numberOfPluralForms();pos.form++)
+            skip=skip||!m_catalog->isModified(pos);
+    }
+    if (!skip)
+        emit toggleApprovementRequested();
+}
+
+
 void XliffTextEdit::cursorToStart()
 {
     QTextCursor t=textCursor();
--- trunk/KDE/kdesdk/lokalize/src/xlifftextedit.h #972909:972910
@@ -76,6 +76,7 @@
 
     int strForMicePosIfUnderTag(QPoint mice, CatalogString& str);
 
+    void requestToggleApprovement();
 
 private slots:
     //for Undo/Redo tracking


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

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