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

List:       koffice-devel
Subject:    Bug fix patch for KPresenter (#16406, #25408)
From:       Toshitaka Fujioka <toshitaka () kde ! gr ! jp>
Date:       2001-06-25 10:15:36
[Download RAW message or body]

Hello,

This patch fixes bug of #16406 and #25408.

Contents of bug report (#16406):
-------------------------------------------
It is hard to move or resize objects that aren't on
the top layer in kpresenter. However, it is not too
difficult to select them. I suggest that when mouse
button + motion is detected, you attempt to apply
the drag to any selected objects before trying to
apply it to the topmost objects.

For instance, if I have an image whose handles are
below a text box, I should be able to select it
by clicking on an exposed portion of the image to
select it (which draws the image's handles). Then,
when I move over a handle and click+drag to resize,
it resizes the image instead of selecting and moving
the text box.
--------------------------------------------

Contents of bug report (#25408):
---------------------------------------------------------------
If I select an image in the background which is overlapped by a text frame in
the foreground and I try to resize tbis image by dragging an edge on it which
is in the area of the text frame, the focus switches to the text frame. This
behaviour should, in my opinion, be abolished.
----------------------------------------------------------------

And, I display warning when user execute "Lowe object(s)" and 
"Raise object(s)" if object more than one is selected.
(not relational the group object)

Please review.
-- 
Toshitaka Fujioka
http://www.kde.org                The K Desktop Environment Project
                                                    fujioka@kde.org
http://www.kde.gr.jp               Japan KDE User's Group
                                                    toshitaka@kde.gr.jp

-- We offer the best Desktop Environment to you.  (This is my goal. ;-)) --     




["koffice-kpresenter-%2316406-%2325408-fix-20010625.diff" (text/plain)]

diff -ur koffice.orig/kpresenter/kpresenter_doc.cc \
                koffice/kpresenter/kpresenter_doc.cc
--- koffice.orig/kpresenter/kpresenter_doc.cc	Mon Jun 25 18:41:53 2001
+++ koffice/kpresenter/kpresenter_doc.cc	Mon Jun 25 18:43:56 2001
@@ -158,6 +158,7 @@
     pasteXOffset = pasteYOffset = 0;
     ignoreSticky = TRUE;
     m_pixmapMap = 0L;
+    raiseAndLowerObject = false;
 
     _header = new KPTextObject( this );
     _header->setDrawEditRect( false );
@@ -2516,6 +2517,8 @@
     LowerRaiseCmd *lrCmd = new LowerRaiseCmd( i18n( "Lower Object(s)" ), \
_objectList, _new, this );  lrCmd->execute();
     _commands.addCommand( lrCmd );
+
+    raiseAndLowerObject = true;
 }
 
 /*========================= raise object =========================*/
@@ -2541,6 +2544,8 @@
     LowerRaiseCmd *lrCmd = new LowerRaiseCmd( i18n( "Raise Object(s)" ), \
_objectList, _new, this );  lrCmd->execute();
     _commands.addCommand( lrCmd );
+
+    raiseAndLowerObject = true;
 }
 
 /*=================== insert a picture ==========================*/
diff -ur koffice.orig/kpresenter/kpresenter_doc.h koffice/kpresenter/kpresenter_doc.h
--- koffice.orig/kpresenter/kpresenter_doc.h	Mon Jun 25 18:41:53 2001
+++ koffice/kpresenter/kpresenter_doc.h	Mon Jun 25 18:44:28 2001
@@ -298,6 +298,8 @@
 
     void initConfig();
 
+    bool raiseAndLowerObject;
+
 public slots:
     void movePage( int from, int to );
     void copyPage( int from, int to );
diff -ur koffice.orig/kpresenter/kpresenter_view.cc \
                koffice/kpresenter/kpresenter_view.cc
--- koffice.orig/kpresenter/kpresenter_view.cc	Mon Jun 25 18:41:53 2001
+++ koffice/kpresenter/kpresenter_view.cc	Mon Jun 25 18:45:55 2001
@@ -55,6 +55,7 @@
 
 #include <kfiledialog.h>
 #include <kmessagebox.h>
+#include <knotifyclient.h>
 #include <kstdaction.h>
 #include <kapp.h>
 #include <kio/netaccess.h>
@@ -739,15 +740,27 @@
 /*===============================================================*/
 void KPresenterView::extraRaise()
 {
-    page->setToolEditMode( TEM_MOUSE );
-    m_pKPresenterDoc->raiseObjs( xOffset, yOffset );
+    if ( page->onlyOneSelectedObject() ) {
+        page->setToolEditMode( TEM_MOUSE );
+        m_pKPresenterDoc->raiseObjs( xOffset, yOffset );
+    }
+    else {
+        KNotifyClient::beep();
+        KMessageBox::information( this, i18n("Please select only one object."), \
i18n("Raise Object(s)") ); +    }
 }
 
 /*===============================================================*/
 void KPresenterView::extraLower()
 {
-    page->setToolEditMode( TEM_MOUSE );
-    m_pKPresenterDoc->lowerObjs( xOffset, yOffset );
+    if ( page->onlyOneSelectedObject() ) {
+        page->setToolEditMode( TEM_MOUSE );
+        m_pKPresenterDoc->lowerObjs( xOffset, yOffset );
+    }
+    else {
+        KNotifyClient::beep();
+        KMessageBox::information( this, i18n("Please select only one object."), \
i18n("Lower Object(s)") ); +    }
 }
 
 /*===============================================================*/
diff -ur koffice.orig/kpresenter/page.cc koffice/kpresenter/page.cc
--- koffice.orig/kpresenter/page.cc	Mon Jun 25 18:41:53 2001
+++ koffice/kpresenter/page.cc	Mon Jun 25 18:48:44 2001
@@ -109,6 +109,7 @@
         ratio = 0;
         keepRatio = false;
         mouseSelectedObject = false;
+        selectedObjectNumber = -1;
     } else {
         view = 0;
         hide();
@@ -365,6 +366,7 @@
                     if ( overObject ) {
                         selectObj( kpobject );
                         modType = MT_NONE;
+                        raiseObject();
                     } else {
                         modType = MT_NONE;
                         if ( !( e->state() & ShiftButton ) && !( e->state() & \
ControlButton ) ) @@ -1294,6 +1296,13 @@
     if(view->kPresenterDoc()->numSelected()==0)
         return;
 
+    if ( !view->kPresenterDoc()->raiseAndLowerObject && selectedObjectNumber != -1 ) \
{ +        lowerObject();
+        selectedObjectNumber = -1;
+    }
+    else
+        view->kPresenterDoc()->raiseAndLowerObject = false;
+
     KPObject *kpobject;
 
     for ( int i = 0; i < static_cast<int>( objectList()->count() ); i++ )
@@ -4355,6 +4364,58 @@
     _repaint( kpobject );
 
     oldBoundingRect = kpobject->getBoundingRect( 0, 0 );
+}
+
+void Page::raiseObject()
+{
+    if ( selectedObjectNumber == -1 ) {
+        KPObject *kpobject = 0;
+
+        if ( onlyOneSelectedObject() ) { // execute this if user selected is one \
object. +            for ( uint i = 0; i < objectList()->count(); ++i ) {
+                kpobject = objectList()->at( i );
+                if ( kpobject->isSelected() ) {
+                    objectList()->remove( i );
+                    objectList()->append( kpobject );
+                    selectedObjectNumber = i;
+                    break;
+                }
+            }
+        }
+        else
+            selectedObjectNumber = -1;
+    }
+}
+
+void Page::lowerObject()
+{
+    KPObject *kpobject = 0;
+
+    for ( uint i = 0; i < objectList()->count(); ++i ) {
+        kpobject = objectList()->at( i );
+        if ( kpobject->isSelected() ) {
+            objectList()->remove( i );
+            objectList()->insert( selectedObjectNumber, kpobject );
+            break;
+        }
+    }
+}
+
+bool Page::onlyOneSelectedObject()
+{
+    KPObject *kpobject = 0;
+    int j = 0;
+    // Examine number of the object which user selected.
+    for ( uint i = 0; i < objectList()->count(); ++i ) {
+        kpobject = objectList()->at( i );
+        if ( kpobject->isSelected() ) {
+            ++j;
+            if ( j > 1 )
+                return false;
+        }
+    }
+
+    return true;
 }
 
 #include <page.moc>
diff -ur koffice.orig/kpresenter/page.h koffice/kpresenter/page.h
--- koffice.orig/kpresenter/page.h	Mon Jun 25 18:41:53 2001
+++ koffice/kpresenter/page.h	Mon Jun 25 18:49:44 2001
@@ -130,6 +130,8 @@
 
     void setMouseSelectedObject(bool b);
 
+    bool onlyOneSelectedObject();
+
 public slots:
     void exitEditMode();
 
@@ -267,6 +269,10 @@
 
     void moveObject( int x, int y, bool key );
     void resizeObject();
+
+    void raiseObject();
+    void lowerObject();
+    int selectedObjectNumber;
 
 public slots:
     void chPic();


_______________________________________________
Koffice-devel mailing list
Koffice-devel@master.kde.org
http://master.kde.org/mailman/listinfo/koffice-devel


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

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