[labplot/frameworks] /: Merge branch 'master' into frameworks
Alexander Semke
alexander.semke at web.de
Sat Sep 17 08:13:08 UTC 2016
Git commit d2257c24d4249ec0e130a70b805192dfade2bf33 by Alexander Semke.
Committed on 17/09/2016 at 08:12.
Pushed by asemke into branch 'frameworks'.
Merge branch 'master' into frameworks
M +1 -1 CMakeLists.txt
M +17 -4 doc/index.docbook
M +6 -1 src/CMakeLists.txt
M +14 -0 src/backend/worksheet/TextLabel.cpp
M +92 -4 src/backend/worksheet/plots/cartesian/Axis.cpp
M +73 -10 src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
M +177 -0 src/backend/worksheet/plots/cartesian/XYCurve.cpp
M +24 -3 src/commonfrontend/worksheet/WorksheetView.cpp
M +6 -0 src/commonfrontend/worksheet/WorksheetView.h
M +1 -1 src/kdefrontend/GuiObserver.cpp
M +4 -4 src/kdefrontend/TemplateHandler.cpp
M +9 -13 src/kdefrontend/TemplateHandler.h
M +208 -0 src/kdefrontend/ThemeHandler.cpp
M +25 -5 src/kdefrontend/dockwidgets/CartesianPlotDock.cpp
M +6 -1 src/kdefrontend/dockwidgets/CartesianPlotDock.h
M +1 -0 src/kdefrontend/dockwidgets/MatrixDock.cpp
M +1 -0 src/kdefrontend/dockwidgets/SpreadsheetDock.cpp
M +1 -0 src/kdefrontend/dockwidgets/WorksheetDock.cpp
M +14 -3 src/kdefrontend/dockwidgets/XYDataReductionCurveDock.cpp
M +104 -0 src/kdefrontend/widgets/ThemesWidget.cpp
http://commits.kde.org/labplot/d2257c24d4249ec0e130a70b805192dfade2bf33
diff --cc CMakeLists.txt
index b3adcd0,4addc82..e7c6cb6
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@@ -4,14 -4,12 +4,14 @@@ cmake_minimum_required(VERSION 2.8.12
find_package(ECM 1.3.0 REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
-find_package(Qt4 REQUIRED)
-find_package(KDE4 REQUIRED)
+find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Widgets Svg Concurrent)
- find_package(KF5 REQUIRED COMPONENTS I18n KDELibs4Support)
++find_package(KF5 REQUIRED COMPONENTS I18n KDELibs4Support NewStuff)
+include(FeatureSummary)
include(ECMInstallIcons)
include(KDEInstallDirs)
-include(KDE4Defaults)
+include(KDECompilerSettings)
+include(KDECMakeSettings)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wundef -Wpointer-arith -Wcast-align -Wunreachable-code -Wunused -fno-omit-frame-pointer -fstack-protector -fno-exceptions")
diff --cc src/CMakeLists.txt
index fda1c24,822f638..74b81ea
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@@ -256,9 -246,9 +260,9 @@@ add_subdirectory( themes
# set(LABPLOT_SRCS ${GUI_SOURCES} ${PLOTS_SOURCES} parser/parser.tab.c)
set(LABPLOT_SRCS ${GUI_SOURCES} ${PLOTS_SOURCES})
INCLUDE_DIRECTORIES(. ${GSL_INCLUDE_DIR} ${GSL_INCLUDEDIR}/..)
-kde4_add_ui_files(LABPLOT_SRCS ${UI_SOURCES})
-kde4_add_executable(labplot2 ${LABPLOT_SRCS} ${BACKEND_SOURCES} ${DATASOURCES_SOURCES} ${COMMONFRONTEND_SOURCES} ${TOOLS_SOURCES})
-target_link_libraries(labplot2 ${KDE4_KDEUI_LIBS} ${KDE4_KIO_LIBS} ${KDE4_KNEWSTUFF3_LIBS} ${GSL_LIBRARIES} ${GSL_CBLAS_LIBRARIES} ${NETCDF_LIBRARY} ${FFTW_LIBRARIES} ${CFITSIO_LIBRARY})
+qt5_wrap_ui(LABPLOT_SRCS ${UI_SOURCES})
+add_executable(labplot2 ${LABPLOT_SRCS} ${BACKEND_SOURCES} ${CANTOR_SOURCES} ${DATASOURCES_SOURCES} ${COMMONFRONTEND_SOURCES} ${TOOLS_SOURCES} ${QTMOC_HDRS})
- target_link_libraries(labplot2 KF5::KDELibs4Support KF5::Archive KF5::XmlGui Qt5::Svg ${GSL_LIBRARIES} ${GSL_CBLAS_LIBRARIES} ${CANTOR_LIBS} ${NETCDF_LIBRARY} ${FFTW_LIBRARIES} ${CFITSIO_LIBRARY})
++target_link_libraries(labplot2 KF5::KDELibs4Support KF5::Archive KF5::XmlGui KF5::NewStuff Qt5::Svg ${GSL_LIBRARIES} ${GSL_CBLAS_LIBRARIES} ${CANTOR_LIBS} ${NETCDF_LIBRARY} ${FFTW_LIBRARIES} ${CFITSIO_LIBRARY})
IF (HDF5_FOUND)
target_link_libraries(labplot2 ${HDF5_C_LIBRARIES})
ENDIF (HDF5_FOUND)
@@@ -266,9 -256,9 +270,10 @@@
############## installation ################################
-install(TARGETS labplot2 DESTINATION ${BIN_INSTALL_DIR})
-install(FILES ${KDEFRONTEND_DIR}/labplot2ui.rc ${KDEFRONTEND_DIR}/splash.png DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
+install(TARGETS labplot2 DESTINATION ${INSTALL_TARGETS_DEFAULT_ARGS})
+install(FILES ${KDEFRONTEND_DIR}/labplot2ui.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/${PROJECT_NAME})
+install(FILES ${KDEFRONTEND_DIR}/labplot2ui.rc ${KDEFRONTEND_DIR}/splash.png ${KDEFRONTEND_DIR}/labplot2.ico DESTINATION ${DATA_INSTALL_DIR}/${PROJECT_NAME})
install(PROGRAMS labplot2.desktop DESTINATION ${XDG_APPS_INSTALL_DIR} )
install( FILES labplot2.xml DESTINATION ${XDG_MIME_INSTALL_DIR} )
+ install( FILES labplot2_themes.knsrc DESTINATION ${KDE_INSTALL_CONFDIR} )
update_xdg_mimetypes( ${XDG_MIME_INSTALL_DIR} )
diff --cc src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
index a5ee37f,8734365..755ff5d
--- a/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
+++ b/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
@@@ -53,14 -53,13 +53,14 @@@
#include <QMenu>
#include <QToolBar>
#include <QPainter>
-
+#include <QIcon>
+#include <QAction>
- #include <KLocale>
-
- #define SCALE_MIN CartesianScale::LIMIT_MIN
- #define SCALE_MAX CartesianScale::LIMIT_MAX
++#include <QWidgetAction>
+ #include <KConfigGroup>
-#include <KIcon>
-#include <KAction>
+ #include <KLocale>
+ #include "kdefrontend/ThemeHandler.h"
+ #include "kdefrontend/widgets/ThemesWidget.h"
/**
* \class CartesianPlot
diff --cc src/commonfrontend/worksheet/WorksheetView.cpp
index 4df36b0,5827fc0..8c2f8d5
--- a/src/commonfrontend/worksheet/WorksheetView.cpp
+++ b/src/commonfrontend/worksheet/WorksheetView.cpp
@@@ -272,64 -272,70 +272,70 @@@ void WorksheetView::initActions()
connect(cartesianPlotMouseModeActionGroup, SIGNAL(triggered(QAction*)), SLOT(cartesianPlotMouseModeChanged(QAction*)));
QActionGroup* cartesianPlotAddNewActionGroup = new QActionGroup(this);
- addCurveAction = new KAction(KIcon("labplot-xy-curve"), i18n("xy-curve"), cartesianPlotAddNewActionGroup);
- addEquationCurveAction = new KAction(KIcon("labplot-xy-equation-curve"), i18n("xy-curve from a mathematical equation"), cartesianPlotAddNewActionGroup);
- addDataOperationCurveAction = new KAction(i18n("xy-curve from a data operation"), cartesianPlotAddNewActionGroup);
- addDataReductionCurveAction = new KAction(i18n("xy-curve from a data reduction"), cartesianPlotAddNewActionGroup);
- addDifferentationCurveAction = new KAction(i18n("xy-curve from a differentiation"), cartesianPlotAddNewActionGroup);
- addIntegrationCurveAction = new KAction(i18n("xy-curve from an integration"), cartesianPlotAddNewActionGroup);
+ addCurveAction = new QAction(QIcon::fromTheme("labplot-xy-curve"), i18n("xy-curve"), cartesianPlotAddNewActionGroup);
+ addEquationCurveAction = new QAction(QIcon::fromTheme("labplot-xy-equation-curve"), i18n("xy-curve from a mathematical equation"), cartesianPlotAddNewActionGroup);
- // no icons yet
++ addDataOperationCurveAction = new QAction(i18n("xy-curve from a data operation"), cartesianPlotAddNewActionGroup);
+ addDataReductionCurveAction = new QAction(i18n("xy-curve from a data reduction"), cartesianPlotAddNewActionGroup);
++ addDifferentationCurveAction = new QAction(i18n("xy-curve from a differentiation"), cartesianPlotAddNewActionGroup);
++ addIntegrationCurveAction = new QAction(i18n("xy-curve from an integration"), cartesianPlotAddNewActionGroup);
+ // no icons yet
- addInterpolationCurveAction = new KAction(i18n("xy-curve from an interpolation"), cartesianPlotAddNewActionGroup);
- addSmoothCurveAction = new KAction(i18n("xy-curve from a smooth"), cartesianPlotAddNewActionGroup);
- addFourierFilterCurveAction = new KAction(i18n("xy-curve from a Fourier filter"), cartesianPlotAddNewActionGroup);
- addFourierTransformCurveAction = new KAction(i18n("xy-curve from a Fourier transform"), cartesianPlotAddNewActionGroup);
-// addInterpolationCurveAction = new KAction(KIcon("labplot-xy-interpolation-curve"), i18n("xy-curve from an interpolation"), cartesianPlotAddNewActionGroup);
-// addSmoothCurveAction = new KAction(KIcon("labplot-xy-smooth-curve"), i18n("xy-curve from a smooth"), cartesianPlotAddNewActionGroup);
- addFitCurveAction = new KAction(KIcon("labplot-xy-fit-curve"), i18n("xy-curve from a fit to data"), cartesianPlotAddNewActionGroup);
-// addFourierFilterCurveAction = new KAction(KIcon("labplot-xy-fourier_filter-curve"), i18n("xy-curve from a Fourier filter"), cartesianPlotAddNewActionGroup);
-// addFourierTransformCurveAction = new KAction(KIcon("labplot-xy-fourier_transform-curve"), i18n("xy-curve from a Fourier transform"), cartesianPlotAddNewActionGroup);
- addLegendAction = new KAction(KIcon("text-field"), i18n("legend"), cartesianPlotAddNewActionGroup);
- addHorizontalAxisAction = new KAction(KIcon("labplot-axis-horizontal"), i18n("horizontal axis"), cartesianPlotAddNewActionGroup);
- addVerticalAxisAction = new KAction(KIcon("labplot-axis-vertical"), i18n("vertical axis"), cartesianPlotAddNewActionGroup);
- addCustomPointAction = new KAction(KIcon("draw-cross"), i18n("custom point"), cartesianPlotAddNewActionGroup);
+ addInterpolationCurveAction = new QAction(i18n("xy-curve from an interpolation"), cartesianPlotAddNewActionGroup);
+ addSmoothCurveAction = new QAction(i18n("xy-curve from a smooth"), cartesianPlotAddNewActionGroup);
- addFitCurveAction = new QAction(QIcon::fromTheme("labplot-xy-fit-curve"), i18n("xy-curve from a fit to data"), cartesianPlotAddNewActionGroup);
+ addFourierFilterCurveAction = new QAction(i18n("xy-curve from a Fourier filter"), cartesianPlotAddNewActionGroup);
+ addFourierTransformCurveAction = new QAction(i18n("xy-curve from a Fourier transform"), cartesianPlotAddNewActionGroup);
+// addInterpolationCurveAction = new QAction(QIcon::fromTheme("labplot-xy-interpolation-curve"), i18n("xy-curve from an interpolation"), cartesianPlotAddNewActionGroup);
+// addSmoothCurveAction = new QAction(QIcon::fromTheme("labplot-xy-smooth-curve"), i18n("xy-curve from a smooth"), cartesianPlotAddNewActionGroup);
++ addFitCurveAction = new QAction(QIcon::fromTheme("labplot-xy-fit-curve"), i18n("xy-curve from a fit to data"), cartesianPlotAddNewActionGroup);
+// addFourierFilterCurveAction = new QAction(QIcon::fromTheme("labplot-xy-fourier_filter-curve"), i18n("xy-curve from a Fourier filter"), cartesianPlotAddNewActionGroup);
+// addFourierTransformCurveAction = new QAction(QIcon::fromTheme("labplot-xy-fourier_transform-curve"), i18n("xy-curve from a Fourier transform"), cartesianPlotAddNewActionGroup);
+ addLegendAction = new QAction(QIcon::fromTheme("text-field"), i18n("legend"), cartesianPlotAddNewActionGroup);
+ addHorizontalAxisAction = new QAction(QIcon::fromTheme("labplot-axis-horizontal"), i18n("horizontal axis"), cartesianPlotAddNewActionGroup);
+ addVerticalAxisAction = new QAction(QIcon::fromTheme("labplot-axis-vertical"), i18n("vertical axis"), cartesianPlotAddNewActionGroup);
+ addCustomPointAction = new QAction(QIcon::fromTheme("draw-cross"), i18n("custom point"), cartesianPlotAddNewActionGroup);
connect(cartesianPlotAddNewActionGroup, SIGNAL(triggered(QAction*)), SLOT(cartesianPlotAddNew(QAction*)));
// Analysis menu
- // no icons yet
- addDataOperationAction = new KAction(i18n("Data operation"), cartesianPlotAddNewActionGroup);
- addDataReductionAction = new KAction(i18n("Data reduction"), cartesianPlotAddNewActionGroup);
- addDifferentiationAction = new KAction(i18n("Differentiation"), cartesianPlotAddNewActionGroup);
- addIntegrationAction = new KAction(i18n("Integration"), cartesianPlotAddNewActionGroup);
++ addDataOperationAction = new QAction(i18n("Data operation"), cartesianPlotAddNewActionGroup);
+ addDataReductionAction = new QAction(i18n("Data reduction"), cartesianPlotAddNewActionGroup);
++ addDifferentiationAction = new QAction(i18n("Differentiation"), cartesianPlotAddNewActionGroup);
++ addIntegrationAction = new QAction(i18n("Integration"), cartesianPlotAddNewActionGroup);
+ // no icons yet
- addInterpolationAction = new KAction(i18n("Interpolation"), cartesianPlotAddNewActionGroup);
- addSmoothAction = new KAction(i18n("Smooth"), cartesianPlotAddNewActionGroup);
- addFitAction = new KAction(KIcon("labplot-xy-fit-curve"), i18n("Data fitting"), cartesianPlotAddNewActionGroup);
- addFourierFilterAction = new KAction(i18n("Fourier filter"), cartesianPlotAddNewActionGroup);
- addFourierTransformAction = new KAction(i18n("Fourier transform"), cartesianPlotAddNewActionGroup);
-// addInterpolationAction = new KAction(KIcon("labplot-xy-interpolation-curve"), i18n("Interpolation"), cartesianPlotAddNewActionGroup);
-// addSmoothAction = new KAction(KIcon("labplot-xy-smooth-curve"), i18n("Smooth"), cartesianPlotAddNewActionGroup);
-// addFourierFilterAction = new KAction(KIcon("labplot-xy-fourier_filter-curve"), i18n("Fourier filter"), cartesianPlotAddNewActionGroup);
-// addFourierTransformAction = new KAction(KIcon("labplot-xy-fourier_transform-curve"), i18n("Fourier transform"), cartesianPlotAddNewActionGroup);
+ addInterpolationAction = new QAction(i18n("Interpolation"), cartesianPlotAddNewActionGroup);
+ addSmoothAction = new QAction(i18n("Smooth"), cartesianPlotAddNewActionGroup);
+ addFitAction = new QAction(QIcon::fromTheme("labplot-xy-fit-curve"), i18n("Data fitting"), cartesianPlotAddNewActionGroup);
+ addFourierFilterAction = new QAction(i18n("Fourier filter"), cartesianPlotAddNewActionGroup);
+ addFourierTransformAction = new QAction(i18n("Fourier transform"), cartesianPlotAddNewActionGroup);
+// addInterpolationAction = new QAction(QIcon::fromTheme("labplot-xy-interpolation-curve"), i18n("Interpolation"), cartesianPlotAddNewActionGroup);
+// addSmoothAction = new QAction(QIcon::fromTheme("labplot-xy-smooth-curve"), i18n("Smooth"), cartesianPlotAddNewActionGroup);
+// addFourierFilterAction = new QAction(QIcon::fromTheme("labplot-xy-fourier_filter-curve"), i18n("Fourier filter"), cartesianPlotAddNewActionGroup);
+// addFourierTransformAction = new QAction(QIcon::fromTheme("labplot-xy-fourier_transform-curve"), i18n("Fourier transform"), cartesianPlotAddNewActionGroup);
QActionGroup* cartesianPlotNavigationGroup = new QActionGroup(this);
- scaleAutoAction = new KAction(KIcon("labplot-auto-scale-all"), i18n("auto scale"), cartesianPlotNavigationGroup);
+ scaleAutoAction = new QAction(QIcon::fromTheme("labplot-auto-scale-all"), i18n("auto scale"), cartesianPlotNavigationGroup);
scaleAutoAction->setData(CartesianPlot::ScaleAuto);
- scaleAutoXAction = new KAction(KIcon("labplot-auto-scale-x"), i18n("auto scale X"), cartesianPlotNavigationGroup);
+ scaleAutoXAction = new QAction(QIcon::fromTheme("labplot-auto-scale-x"), i18n("auto scale X"), cartesianPlotNavigationGroup);
scaleAutoXAction->setData(CartesianPlot::ScaleAutoX);
- scaleAutoYAction = new KAction(KIcon("labplot-auto-scale-y"), i18n("auto scale Y"), cartesianPlotNavigationGroup);
+ scaleAutoYAction = new QAction(QIcon::fromTheme("labplot-auto-scale-y"), i18n("auto scale Y"), cartesianPlotNavigationGroup);
scaleAutoYAction->setData(CartesianPlot::ScaleAutoY);
- zoomInAction = new KAction(KIcon("zoom-in"), i18n("zoom in"), cartesianPlotNavigationGroup);
+ zoomInAction = new QAction(QIcon::fromTheme("zoom-in"), i18n("zoom in"), cartesianPlotNavigationGroup);
zoomInAction->setData(CartesianPlot::ZoomIn);
- zoomOutAction = new KAction(KIcon("zoom-out"), i18n("zoom out"), cartesianPlotNavigationGroup);
+ zoomOutAction = new QAction(QIcon::fromTheme("zoom-out"), i18n("zoom out"), cartesianPlotNavigationGroup);
zoomOutAction->setData(CartesianPlot::ZoomOut);
- zoomInXAction = new KAction(KIcon("labplot-zoom-in-x"), i18n("zoom in X"), cartesianPlotNavigationGroup);
+ zoomInXAction = new QAction(QIcon::fromTheme("labplot-zoom-in-x"), i18n("zoom in X"), cartesianPlotNavigationGroup);
zoomInXAction->setData(CartesianPlot::ZoomInX);
- zoomOutXAction = new KAction(KIcon("labplot-zoom-out-x"), i18n("zoom out X"), cartesianPlotNavigationGroup);
+ zoomOutXAction = new QAction(QIcon::fromTheme("labplot-zoom-out-x"), i18n("zoom out X"), cartesianPlotNavigationGroup);
zoomOutXAction->setData(CartesianPlot::ZoomOutX);
- zoomInYAction = new KAction(KIcon("labplot-zoom-in-y"), i18n("zoom in Y"), cartesianPlotNavigationGroup);
+ zoomInYAction = new QAction(QIcon::fromTheme("labplot-zoom-in-y"), i18n("zoom in Y"), cartesianPlotNavigationGroup);
zoomInYAction->setData(CartesianPlot::ZoomInY);
- zoomOutYAction = new KAction(KIcon("labplot-zoom-out-y"), i18n("zoom out Y"), cartesianPlotNavigationGroup);
+ zoomOutYAction = new QAction(QIcon::fromTheme("labplot-zoom-out-y"), i18n("zoom out Y"), cartesianPlotNavigationGroup);
zoomOutYAction->setData(CartesianPlot::ZoomOutY);
- shiftLeftXAction = new KAction(KIcon("labplot-shift-left-x"), i18n("shift left X"), cartesianPlotNavigationGroup);
+ shiftLeftXAction = new QAction(QIcon::fromTheme("labplot-shift-left-x"), i18n("shift left X"), cartesianPlotNavigationGroup);
shiftLeftXAction->setData(CartesianPlot::ShiftLeftX);
- shiftRightXAction = new KAction(KIcon("labplot-shift-right-x"), i18n("shift right X"), cartesianPlotNavigationGroup);
+ shiftRightXAction = new QAction(QIcon::fromTheme("labplot-shift-right-x"), i18n("shift right X"), cartesianPlotNavigationGroup);
shiftRightXAction->setData(CartesianPlot::ShiftRightX);
- shiftUpYAction = new KAction(KIcon("labplot-shift-up-y"), i18n("shift up Y"), cartesianPlotNavigationGroup);
+ shiftUpYAction = new QAction(QIcon::fromTheme("labplot-shift-up-y"), i18n("shift up Y"), cartesianPlotNavigationGroup);
shiftUpYAction->setData(CartesianPlot::ShiftUpY);
- shiftDownYAction = new KAction(KIcon("labplot-shift-down-y"), i18n("shift down Y"), cartesianPlotNavigationGroup);
+ shiftDownYAction = new QAction(QIcon::fromTheme("labplot-shift-down-y"), i18n("shift down Y"), cartesianPlotNavigationGroup);
shiftDownYAction->setData(CartesianPlot::ShiftDownY);
connect(cartesianPlotNavigationGroup, SIGNAL(triggered(QAction*)), SLOT(cartesianPlotNavigationChanged(QAction*)));
@@@ -450,7 -461,8 +459,8 @@@ void WorksheetView::initMenus()
// Data manipulation menu
m_dataManipulationMenu = new QMenu(i18n("Data Manipulation"));
- m_dataManipulationMenu->setIcon(KIcon("zoom-draw"));
+ m_dataManipulationMenu->setIcon(QIcon::fromTheme("zoom-draw"));
+ m_dataManipulationMenu->addAction(addDataOperationAction);
m_dataManipulationMenu->addAction(addDataReductionAction);
}
diff --cc src/kdefrontend/TemplateHandler.h
index 382fce8,3992cf0..4ec8b2b
--- a/src/kdefrontend/TemplateHandler.h
+++ b/src/kdefrontend/TemplateHandler.h
@@@ -30,13 -30,11 +30,12 @@@
#ifndef TEMPLATEHANDLER_H
#define TEMPLATEHANDLER_H
- #include <QtWidgets/QWidget>
- class QHBoxLayout;
+ #include <QWidget>
++
class QToolButton;
- class QSpacerItem;
class KConfig;
- class TemplateHandler : public QWidget{
+ class TemplateHandler : public QWidget {
Q_OBJECT
public:
diff --cc src/kdefrontend/ThemeHandler.cpp
index 0000000,53af77b..3f12381
mode 000000,100755..100755
--- a/src/kdefrontend/ThemeHandler.cpp
+++ b/src/kdefrontend/ThemeHandler.cpp
@@@ -1,0 -1,207 +1,208 @@@
+ /***************************************************************************
+ File : ThemeHandler.cpp
+ Project : LabPlot
+ Description : Widget for handling saving and loading of themes
+ --------------------------------------------------------------------
+ Copyright : (C) 2016 Prakriti Bhardwaj (p_bhardwaj14 at informatik.uni-kl.de)
+ Copyright : (C) 2016 Alexander Semke (alexander.semke at web.de)
+
+ ***************************************************************************/
+
+ /***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
+ * Boston, MA 02110-1301 USA *
+ * *
+ ***************************************************************************/
+
+ #include "ThemeHandler.h"
+ #include "widgets/ThemesWidget.h"
+
+ #include <QDir>
+ #include <QHBoxLayout>
+ #include <QPushButton>
+ #include <QLabel>
+ #include <QFileInfo>
+ #include <QWidgetAction>
+
++#include <KGlobal>
+ #include <KLocale>
+ #include <KStandardDirs>
+ #include <KLineEdit>
+ #include <KMenu>
+ #include <KConfig>
+ #include <KConfigGroup>
+
+ #include <KMessageBox>
-#include <knewstuff3/uploaddialog.h>
++#include <KNS3/UploadDialog>
+
+ #include <unistd.h>
+
+ /*!
+ \class ThemeHandler
+ \brief Provides a widget with buttons for loading of themes.
+
+ Emits \c loadConfig() signal that have to be connected
+ to the appropriate slots in the backend (plot widgets)
+
+ \ingroup kdefrontend
+ */
+
+ ThemeHandler::ThemeHandler(QWidget* parent) : QWidget(parent) {
+ QHBoxLayout* horizontalLayout = new QHBoxLayout(this);
+ horizontalLayout->setSpacing(0);
+
+ pbLoadTheme = new QPushButton(this);
+ horizontalLayout->addWidget(pbLoadTheme);
+ pbLoadTheme->setText("Apply theme");
+
+ pbSaveTheme = new QPushButton(this);
+ horizontalLayout->addWidget(pbSaveTheme);
+ pbSaveTheme->setText("Save theme");
+
+ pbPublishTheme = new QPushButton(this);
+ horizontalLayout->addWidget(pbPublishTheme);
+ pbPublishTheme->setText("Publish theme");
+ pbPublishTheme->setEnabled(false);
+
+ QSpacerItem* horizontalSpacer2 = new QSpacerItem(10, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);
+ horizontalLayout->addItem(horizontalSpacer2);
+
+ connect( pbLoadTheme, SIGNAL(clicked()), this, SLOT(showPanel()));
+ connect( pbSaveTheme, SIGNAL(clicked()), this, SLOT(saveMenu()));
+ connect( pbPublishTheme, SIGNAL(clicked()), this, SLOT(publishThemes()));
+
+ //find all available themes files (system wide and user specific local files)
+ //the list m_themeList contains full pathes (path + file name)
+ m_themeList = KGlobal::dirs()->findAllResources("appdata", "themes/*");
+ pbLoadTheme->setEnabled(!m_themeList.empty());
+ }
+
+ void ThemeHandler::loadSelected(QString name) {
+ QString themeFilePath;
+ foreach(QString filePath, m_themeList) {
+ if( filePath.indexOf(name)!=-1 ) {
+ themeFilePath = filePath;
+ break;
+ }
+ }
+ KConfig config(themeFilePath, KConfig::SimpleConfig);
+ emit (loadThemeRequested(config));
+
+ emit info( i18n("Theme \"%1\" was loaded.", name) );
+
+ //in case a local theme file was loaded (we have write access), allow to publish it
+ if (KGlobal::dirs()->checkAccess(themeFilePath, W_OK)) {
+ pbPublishTheme->setEnabled(true);
+ m_currentLocalTheme = themeFilePath.right(themeFilePath.length() - themeFilePath.lastIndexOf(QDir::separator()) - 1);
+ } else {
+ pbPublishTheme->setEnabled(false);
+ m_currentLocalTheme.clear();
+ }
+ }
+
+ QStringList ThemeHandler::themes() {
+ QStringList pathList = KGlobal::dirs()->findAllResources("data", "labplot2/themes/*");
+ pathList.append(KGlobal::dirs()->findAllResources("appdata", "themes/*"));
+ QStringList themeList;
+ for(int i = 0; i < pathList.size(); ++i) {
+ QFileInfo fileinfo(pathList.at(i));
+ themeList.append(fileinfo.fileName().split('.').at(0));
+ }
+ return themeList;
+ }
+
+ const QString ThemeHandler::themeFilePath(const QString& name) {
+ QStringList themes = KGlobal::dirs()->findAllResources("data", "labplot2/themes/*");
+ themes.append(KGlobal::dirs()->findAllResources("appdata", "themes/*"));
+ for (int i=0; i<themes.size(); ++i) {
+ if ( themes.at(i).indexOf(name)!=-1 )
+ return themes.at(i);
+ }
+
+ return QString();
+ }
+
+ void ThemeHandler::showPanel() {
+ QMenu menu;
+ ThemesWidget themeWidget(&menu);
+ connect(&themeWidget, SIGNAL(themeSelected(QString)), this, SLOT(loadSelected(QString)));
+ connect(&themeWidget, SIGNAL(themeSelected(QString)), &menu, SLOT(close()));
+ connect(&themeWidget, SIGNAL(canceled()), &menu, SLOT(close()));
+
+ QWidgetAction* widgetAction = new QWidgetAction(this);
+ widgetAction->setDefaultWidget(&themeWidget);
+ menu.addAction(widgetAction);
+
+ QPoint pos(-menu.sizeHint().width()+pbLoadTheme->width(),-menu.sizeHint().height());
+ menu.setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
+ menu.exec(pbLoadTheme->mapToGlobal(pos));
+ }
+
+ void ThemeHandler::saveMenu() {
+ KMenu menu;
+ menu.addTitle(i18n("Save as"));
+
+ // add editable action
+ QWidgetAction* widgetAction = new QWidgetAction(this);
+ QFrame* frame = new QFrame(this);
+ QHBoxLayout* layout = new QHBoxLayout(frame);
+
+ QLabel* label = new QLabel(i18n("Enter name:"), frame);
+ layout->addWidget(label);
+
+ KLineEdit* leFilename = new KLineEdit("", frame);
+ layout->addWidget(leFilename);
+ connect(leFilename, SIGNAL(returnPressed(QString)), this, SLOT(saveNewSelected(QString)));
+ connect(leFilename, SIGNAL(returnPressed(QString)), &menu, SLOT(close()));
+
+ widgetAction->setDefaultWidget(frame);
+ menu.addAction(widgetAction);
+
+ QPoint pos(-menu.sizeHint().width()+pbSaveTheme->width(),-menu.sizeHint().height());
+ menu.exec(pbSaveTheme->mapToGlobal(pos));
+ leFilename->setFocus();
+ }
+
+ void ThemeHandler::saveNewSelected(const QString& filename) {
+ KConfig config(KGlobal::dirs()->locateLocal("appdata", "themes") + '/' + filename, KConfig::SimpleConfig);
+ emit (saveThemeRequested(config));
+ emit info( i18n("New theme \"%1\" was saved.", filename) );
+
+ m_currentLocalTheme = filename;
+ m_themeList.append(config.name());
+
+ //enable the publish button so the newly created theme can be published
+ pbPublishTheme->setEnabled(true);
+ }
+
+ /*!
+ opens the dialog to upload the currently selected local theme.
+ The publish button is only enabled if a local theme was loaded or one of the themes was modified and saved localy.
+ */
+ void ThemeHandler::publishThemes() {
+ int ret = KMessageBox::questionYesNo(this,
+ i18n("Do you want to upload your theme %1 to public web server?").arg(m_currentLocalTheme),
+ i18n("Publish Theme"));
+ if (ret != KMessageBox::Yes)
+ return;
+
+ // creating upload dialog
+ KNS3::UploadDialog dialog("labplot2_themes.knsrc", this);
+ dialog.setUploadFile(KGlobal::dirs()->locateLocal("appdata", "themes") + '/' + m_currentLocalTheme);
+ dialog.setUploadName(m_currentLocalTheme);
+ //dialog.setDescription(); TODO: allow the user to provide a short description for the theme to be uploaded
+ dialog.exec();
+ }
diff --cc src/kdefrontend/widgets/ThemesWidget.cpp
index 0000000,e90c14a..17ff917
mode 000000,100644..100644
--- a/src/kdefrontend/widgets/ThemesWidget.cpp
+++ b/src/kdefrontend/widgets/ThemesWidget.cpp
@@@ -1,0 -1,103 +1,104 @@@
+ /***************************************************************************
+ File : ThemesWidget.cpp
+ Project : LabPlot
+ Description : widget for selecting themes
+ --------------------------------------------------------------------
+ Copyright : (C) 2016 Prakriti Bhardwaj (p_bhardwaj14 at informatik.uni-kl.de)
+ Copyright : (C) 2016 Alexander Semke (alexander.semke at web.de)
+
+ ***************************************************************************/
+
+ /***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, *
+ * Boston, MA 02110-1301 USA *
+ * *
+ ***************************************************************************/
+ #include "ThemesWidget.h"
+ #include "kdefrontend/ThemeHandler.h"
+
+ #include <QListWidgetItem>
+ #include <QStandardItemModel>
+ #include <QFile>
-#include <KStandardDirs>
+
++#include <KGlobal>
++#include <KStandardDirs>
+ #include <KMessageBox>
+ #include <kdebug.h>
-#include <knewstuff3/downloaddialog.h>
++#include <KNS3/DownloadDialog>
+
+ /*!
+ \class ThemesWidget
+ \brief Widget for showing theme previews and for selecting a theme.
+
+ \ingroup kdefrontend
+ */
+ ThemesWidget::ThemesWidget(QWidget* parent) : QListView(parent) {
+ setSelectionMode(QAbstractItemView::SingleSelection);
+ setWordWrap(true);
+ setViewMode(QListWidget::IconMode);
+ setResizeMode(QListWidget::Adjust);
+
+ //TODO: make this pixel-independent
+ setIconSize(QSize(200,200));
+ setMaximumWidth(225);
+
+ //show preview pixmaps
+ QStandardItemModel* mContentItemModel = new QStandardItemModel(this);
+ QStringList themeList = ThemeHandler::themes();
+ QString themeImgPath = KGlobal::dirs()->findDirs("data", "labplot2/themes/screenshots/").first();
+ QString tempPath;
+
+ for (int i = 0; i < themeList.size(); ++i) {
+ QStandardItem* listItem = new QStandardItem();
+
+ tempPath = themeImgPath + themeList.at(i) + ".png";
+ if(!QFile::exists(tempPath))
+ tempPath = themeImgPath + "Unavailable.png";
+
+ listItem->setIcon(QIcon(QPixmap(tempPath)));
+ listItem->setText(themeList.at(i));
+ listItem->setData(themeList.at(i), Qt::UserRole);
+ mContentItemModel->appendRow(listItem);
+ }
+
+ //adding download themes option
+ QStandardItem* listItem = new QStandardItem();
+ listItem->setIcon(QIcon::fromTheme("get-hot-new-stuff"));
+ listItem->setText("Download Themes");
+ listItem->setData("file_download_theme", Qt::UserRole);
+ mContentItemModel->appendRow(listItem);
+
+ setModel(mContentItemModel);
+
+ //SLOTS
+ connect( this, SIGNAL(clicked(QModelIndex)), this, SLOT(applyClicked()) );
+ }
+
+ void ThemesWidget::applyClicked() {
+ QString themeName = currentIndex().data(Qt::UserRole).value<QString>();
+ if(themeName=="file_download_theme")
+ this->downloadThemes();
+ else
+ emit(themeSelected(themeName));
+ }
+
+ void ThemesWidget::downloadThemes() {
+ KNS3::DownloadDialog dialog("labplot2_themes.knsrc", this);
+ dialog.exec();
+ foreach (const KNS3::Entry& e, dialog.changedEntries()) {
+ kDebug() << "Changed Entry: " << e.name();
+ }
+ }
More information about the kde-doc-english
mailing list