[kde-doc-english] [kolourpaint] /: Add "screenshot" action to file menu

Martin Koller kollix at aon.at
Sat Mar 26 22:26:25 CET 2011


Git commit 6108bd8343c14f58e9d6c9df500066d6b44f4f6a by Martin Koller.
Committed on 25/03/2011 at 23:15.
Pushed by mkoller into branch 'master'.

Add "screenshot" action to file menu

FEATURE: 179658
GUI:

M  +0    -2    CMakeLists.txt     
M  +2    -5    kolourpaintui.rc     
M  +0    -2    mainWindow/kpMainWindow.cpp     
M  +2    -15   mainWindow/kpMainWindow.h     
M  +1    -1    mainWindow/kpMainWindowPrivate.h     
M  +38   -11   mainWindow/kpMainWindow_File.cpp     
D  +0    -223  mainWindow/kpMainWindow_Help.cpp     

http://commits.kde.org/kolourpaint/6108bd8343c14f58e9d6c9df500066d6b44f4f6a

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 39b00cc..4b8cdbb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -212,7 +212,6 @@ ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_Colors.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_Edit.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_File.cpp
-${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_Help.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_Image.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_Settings.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_StatusBar.cpp
@@ -434,7 +433,6 @@ ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_Colors.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_Edit.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_File.cpp
-${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_Help.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_Image.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_Settings.cpp
 ${CMAKE_CURRENT_SOURCE_DIR}/mainWindow/kpMainWindow_StatusBar.cpp
diff --git a/kolourpaintui.rc b/kolourpaintui.rc
index e7ed0fc..e8b550b 100644
--- a/kolourpaintui.rc
+++ b/kolourpaintui.rc
@@ -4,7 +4,7 @@ SYNC: Do not change the number of quotes before the version number
       - it is parsed by the KolourPaint wrapper shell script (in standalone
       backport releases of KolourPaint)
 -->
-<gui name="kolourpaint" version="72">
+<gui name="kolourpaint" version="73">
 
 <!--
 SYNC: Check for duplicate actions in menus caused by some of our actions
@@ -17,6 +17,7 @@ SYNC: Check for duplicate actions in menus caused by some of our actions
         <!-- <Action name="file_new_window" append="new_merge" /> -->
 
         <Action name="file_scan" append="open_merge" />
+        <Action name="file_screenshot" append="open_merge" />
         <Separator append="open_merge" />
         <Action name="file_properties" append="open_merge" />
 
@@ -115,10 +116,6 @@ SYNC: Check for duplicate actions in menus caused by some of our actions
         <Action name="settings_show_path" append="show_merge" />
     </Menu>
 
-    <Menu name="help">
-        <Action name="help_taking_screenshots" />
-    </Menu>
-
     <!-- HACK: See kpmainwindow.cpp:kpMainWindow::createGUI(). -->
     <Menu name="toolToolBarHiddenMenu">
         <Action name="tool_brush" />
diff --git a/mainWindow/kpMainWindow.cpp b/mainWindow/kpMainWindow.cpp
index 1439dec..a159509 100644
--- a/mainWindow/kpMainWindow.cpp
+++ b/mainWindow/kpMainWindow.cpp
@@ -607,7 +607,6 @@ void kpMainWindow::setupActions ()
     setupImageMenuActions ();
     setupColorsMenuActions ();
     setupSettingsMenuActions ();
-    setupHelpMenuActions ();
 
     setupTextToolBarActions ();
     setupToolActions ();
@@ -624,7 +623,6 @@ void kpMainWindow::enableDocumentActions (bool enable)
     enableImageMenuDocumentActions (enable);
     enableColorsMenuDocumentActions (enable);
     enableSettingsMenuDocumentActions (enable);
-    enableHelpMenuDocumentActions (enable);
 }
 
 //---------------------------------------------------------------------
diff --git a/mainWindow/kpMainWindow.h b/mainWindow/kpMainWindow.h
index 586d1a4..b0ad9a9 100644
--- a/mainWindow/kpMainWindow.h
+++ b/mainWindow/kpMainWindow.h
@@ -346,6 +346,8 @@ private slots:
     void slotScan ();
     void slotScanned (const QImage &image, int);
 
+    void slotScreenshot();
+
     void slotProperties ();
 
     bool save (bool localOnly = false);
@@ -700,23 +702,8 @@ public:
     void setTextStyle (const kpTextStyle &textStyle_);
     int settingTextStyle () const;
 
-
-//
-// Help Menu
-//
-
-private:
-    void setupHelpMenuActions ();
-    void enableHelpMenuDocumentActions (bool enable = true);
-
-private slots:
-    void slotHelpTakingScreenshots ();
-    void slotHelpTakingScreenshotsFollowLink (const QString &link);
-
-
 private:
     struct kpMainWindowPrivate *d;
 };
 
-
 #endif  // KP_MAIN_WINDOW_H
diff --git a/mainWindow/kpMainWindowPrivate.h b/mainWindow/kpMainWindowPrivate.h
index 322b12e..a0f5d9d 100644
--- a/mainWindow/kpMainWindowPrivate.h
+++ b/mainWindow/kpMainWindowPrivate.h
@@ -120,7 +120,7 @@ struct kpMainWindowPrivate
 
     QAction *actionNew, *actionOpen;
     KRecentFilesAction *actionOpenRecent;
-    KAction *actionScan, *actionProperties,
+    KAction *actionScan, *actionScreenshot, *actionProperties,
             *actionSave, *actionSaveAs, *actionExport,
             *actionReload,
             *actionPrint, *actionPrintPreview,
diff --git a/mainWindow/kpMainWindow_File.cpp b/mainWindow/kpMainWindow_File.cpp
index b7de7d8..b2e4417 100644
--- a/mainWindow/kpMainWindow_File.cpp
+++ b/mainWindow/kpMainWindow_File.cpp
@@ -37,8 +37,9 @@
 #include <qpainter.h>
 #include <qpixmap.h>
 #include <qsize.h>
-#include <QtGui/QPrinter>
-#include <QtGui/QPrintDialog>
+#include <QPrinter>
+#include <QPrintDialog>
+#include <QApplication>
 
 #include <kapplication.h>
 #include <kaction.h>
@@ -100,9 +101,13 @@ void kpMainWindow::setupFileMenuActions ()
     connect(d->actionExport, SIGNAL(triggered(bool) ), SLOT (slotExport ()));
 
     d->actionScan = ac->addAction("file_scan");
-    d->actionScan->setText (i18n ("Scan..."));
-    d->actionScan->setIcon (SmallIcon ("scanner"));
-    connect(d->actionScan, SIGNAL(triggered(bool) ), SLOT (slotScan ()));
+    d->actionScan->setText(i18n ("Scan..."));
+    d->actionScan->setIcon(SmallIcon("scanner"));
+    connect(d->actionScan, SIGNAL(triggered(bool)), SLOT(slotScan()));
+
+    d->actionScreenshot = ac->addAction("file_screenshot");
+    d->actionScreenshot->setText(i18n("Acquire Screenshot"));
+    connect(d->actionScreenshot, SIGNAL(triggered(bool)), SLOT(slotScreenshot()));
 
     d->actionProperties = ac->addAction ("file_properties");
     d->actionProperties->setText (i18n ("Properties"));
@@ -130,6 +135,8 @@ void kpMainWindow::setupFileMenuActions ()
     enableFileMenuDocumentActions (false);
 }
 
+//---------------------------------------------------------------------
+
 // private
 void kpMainWindow::enableFileMenuDocumentActions (bool enable)
 {
@@ -158,6 +165,8 @@ void kpMainWindow::enableFileMenuDocumentActions (bool enable)
     // d->actionQuit->setEnabled (enable);
 }
 
+//---------------------------------------------------------------------
+
 // private
 void kpMainWindow::addRecentURL (const KUrl &url_)
 {
@@ -238,6 +247,8 @@ void kpMainWindow::addRecentURL (const KUrl &url_)
     }
 }
 
+//---------------------------------------------------------------------
+
 
 // private slot
 // TODO: Disable action if
@@ -261,6 +272,8 @@ void kpMainWindow::slotNew ()
     }
 }
 
+//---------------------------------------------------------------------
+
 
 // private
 QSize kpMainWindow::defaultDocSize () const
@@ -288,6 +301,8 @@ QSize kpMainWindow::defaultDocSize () const
     return docSize;
 }
 
+//---------------------------------------------------------------------
+
 // private
 void kpMainWindow::saveDefaultDocSize (const QSize &size)
 {
@@ -301,6 +316,7 @@ void kpMainWindow::saveDefaultDocSize (const QSize &size)
     cfg.sync ();
 }
 
+//---------------------------------------------------------------------
 
 // private
 bool kpMainWindow::shouldOpen ()
@@ -323,6 +339,8 @@ bool kpMainWindow::shouldOpen ()
     return true;
 }
 
+//---------------------------------------------------------------------
+
 // private
 void kpMainWindow::setDocumentChoosingWindow (kpDocument *doc)
 {
@@ -330,18 +348,12 @@ void kpMainWindow::setDocumentChoosingWindow (kpDocument *doc)
     if (d->document && !d->document->isEmpty () &&
         !d->configOpenImagesInSameWindow)
     {
-    #if DEBUG_KP_MAIN_WINDOW
-        kDebug () << "\topen in new window";
-    #endif
         // Send doc to new window.
         kpMainWindow *win = new kpMainWindow (doc);
         win->show ();
     }
     else
     {
-    #if DEBUG_KP_MAIN_WINDOW
-        kDebug () << "\topen in same window";
-    #endif
         // (sets up views, doc signals)
         setDocument (doc);
     }
@@ -625,6 +637,21 @@ void kpMainWindow::slotScanned (const QImage &image, int)
 
 //---------------------------------------------------------------------
 
+void kpMainWindow::slotScreenshot()
+{
+    toolEndShape ();
+    QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
+
+    kpDocument *doc = new kpDocument(pixmap.width(), pixmap.height(),
+                                     documentEnvironment());
+    doc->setImage(pixmap.toImage());
+
+    // Send document to current or new window.
+    setDocumentChoosingWindow(doc);
+}
+
+//---------------------------------------------------------------------
+
 // private slot
 void kpMainWindow::slotProperties ()
 {
diff --git a/mainWindow/kpMainWindow_Help.cpp b/mainWindow/kpMainWindow_Help.cpp
deleted file mode 100644
index 8237ca2..0000000
--- a/mainWindow/kpMainWindow_Help.cpp
+++ /dev/null
@@ -1,223 +0,0 @@
-
-/*
-   Copyright (c) 2003-2007 Clarence Dang <dang at kde.org>
-   All rights reserved.
-
-   Redistribution and use in source and binary forms, with or without
-   modification, are permitted provided that the following conditions
-   are met:
-
-   1. Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-   2. Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-   THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-   IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-   IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-#include <kpMainWindow.h>
-#include <kpMainWindowPrivate.h>
-
-#include <QLabel>
-#include <QtDBus>
-
-#include <kaction.h>
-#include <kactioncollection.h>
-
-#include <kconfig.h>
-#include <kconfiggroup.h>
-#include <kdebug.h>
-#include <kdialog.h>
-#include <kglobal.h>
-#include <klocale.h>
-#include <krun.h>
-#include <kshortcut.h>
-
-
-// private
-void kpMainWindow::setupHelpMenuActions ()
-{
-    KActionCollection *ac = actionCollection ();
-
-
-    // Explanation for action name:
-    // "Taking" is like a digital camera when you record the image and is
-    // analogous to pressing PrintScreen.  However, "Acquiring" is when
-    // the image is brought into KolourPaint, just as you would acquire
-    // from a digital camera in future versions of KolourPaint.  Hence
-    // "Acquiring" is more appropriate.
-    // -- Thurston
-    d->actionHelpTakingScreenshots = ac->addAction ("help_taking_screenshots");
-    d->actionHelpTakingScreenshots->setText (i18n ("Acquiring &Screenshots"));
-    connect (d->actionHelpTakingScreenshots, SIGNAL (triggered (bool)),
-        SLOT (slotHelpTakingScreenshots ()));
-
-
-    enableHelpMenuDocumentActions (false);
-}
-
-// private
-void kpMainWindow::enableHelpMenuDocumentActions (bool /*enable*/)
-{
-    // d->m_actionHelpTakingScreenshots
-}
-
-
-// SYNC: kdebase/kwin/kwinbindings.cpp
-static QString printScreenShortcutString ()
-{
-    KConfigGroup cfg (KGlobal::config (), "Global Shortcuts");
-
-    // TODO: i18n() entry name?  kwinbindings.cpp seems to but it doesn't
-    //       make sense.
-    const QString cfgEntryString = cfg.readEntry ("Desktop Screenshot");
-
-
-    // (only use 1st key sequence, if it exists)
-    const QString humanReadableShortcut =
-        KShortcut (cfgEntryString).primary().toString ();
-
-    if (!humanReadableShortcut.isEmpty ())
-    {
-        return humanReadableShortcut;
-    }
-    else
-    {
-        // (localised)
-        return KShortcut (Qt::CTRL + Qt::Key_Print).toString ();
-    }
-}
-
-
-// private slot
-void kpMainWindow::slotHelpTakingScreenshots ()
-{
-#if DEBUG_KP_MAIN_WINDOW
-    kDebug () << "kpMainWindow::slotHelpTakingScreenshots()";
-#endif
-
-    toolEndShape ();
-
-
-    // TODO: Totally bogus logic if kwin not running under same user as KolourPaint.
-    // SYNC: KWin contains PrintScreen key logic
-#if DEBUG_KP_MAIN_WINDOW
-    //kDebug () << "\tdcopApps=" << dcopApps;
-#endif
-    bool isRunningKDE = true;  // COMPAT QDBus::sessionBus().busService()->nameHasOwner("kwin");
-
-#if 0
-{
-    int i = 0;
-    FILE *fp = fopen ("/home/kdevel/kolourpaint.tmp", "rt");
-    if (fp && fscanf (fp, "Hello: %d", &i) == 1)
-        isRunningKDE = i, fclose (fp);
-}
-#endif
-
-    QString message;
-    if (isRunningKDE)
-    {
-        message = i18n
-        (
-            "<p>"
-            "To acquire a screenshot, press <b>%1</b>."
-            "  The screenshot will be placed into the clipboard"
-            " and you will be able to paste it in KolourPaint."
-            "</p>"
-
-            "<p>"
-            "You may configure the <b>Desktop Screenshot</b> shortcut"
-            " in the KDE System Settings"
-            " module <a href=\"configure kde shortcuts\">Keyboard Shortcuts</a>."
-            "</p>"
-
-            "<p>Alternatively, you may try the application"
-            " <a href=\"run ksnapshot\">KSnapshot</a>."
-            "</p>",
-            // TODO: Totally bogus logic if kwin not running under same user as KolourPaint.
-            ::printScreenShortcutString ()
-        );
-    }
-    else
-    {
-        message = i18n
-        (
-            "<p>"
-            "You do not appear to be running KDE."
-            "</p>"
-
-            // We tell them this much even though they aren't running KDE
-            // to entice them to use KDE since it's so easy.
-            "<p>"
-            "Once you have loaded KDE:<br>"
-            "<blockquote>"
-            "To acquire a screenshot, press <b>%1</b>."
-            "  The screenshot will be placed into the clipboard"
-            " and you will be able to paste it in KolourPaint."
-            "</blockquote>"
-            "</p>"
-
-            "<p>Alternatively, you may try the application"
-            " <a href=\"run ksnapshot\">KSnapshot</a>."
-            "</p>",
-            // TODO: Totally bogus logic if kwin not running under same user as KolourPaint.
-            ::printScreenShortcutString ()
-        );
-    }
-
-
-    // Add extra vertical space
-    message += "<p>&nbsp;</p>";
-
-
-    KDialog dlg (this);
-    dlg.setCaption (i18n ("Acquiring Screenshots"));
-    dlg.setButtons (KDialog::Close);
-    dlg.setDefaultButton (KDialog::Close);
-    dlg.showButtonSeparator (true);
-
-    QLabel *messageLabel = new QLabel (message, &dlg);
-    messageLabel->setWordWrap(true);
-
-    connect (messageLabel, SIGNAL (linkActivated (const QString &)),
-             this, SLOT (slotHelpTakingScreenshotsFollowLink (const QString &)));
-
-    dlg.setMainWidget (messageLabel);
-
-    dlg.exec ();
-}
-
-// private
-void kpMainWindow::slotHelpTakingScreenshotsFollowLink (const QString &link)
-{
-#if DEBUG_KP_MAIN_WINDOW
-    kDebug () << "kpMainWindow::slotHelpTakingScreenshotsFollowLink("
-               << link << ")" << endl;
-#endif
-
-    if (link == "configure kde shortcuts")
-    {
-        KRun::runCommand ("kcmshell4 keys", this);
-    }
-    else if (link == "run ksnapshot")
-    {
-        KRun::runCommand ("ksnapshot", this);
-    }
-    else
-    {
-        kError () << "kpMainWindow::slotHelpTakingScreenshotsFollowLink("
-                   << link << ")" << endl;
-    }
-}



More information about the kde-doc-english mailing list