File indexing completed on 2023-11-26 09:01:55

0001 /*
0002   This file is part of Lokalize
0003 
0004   SPDX-FileCopyrightText: 2014 Nick Shaforostoff <shafff@ukr.net>
0005   SPDX-FileCopyrightText: 2018-2019 Simon Depiets <sdepiets@gmail.com>
0006 
0007   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0008 */
0009 
0010 #ifndef LOKALIZESUBWINDOWBASE_H
0011 #define LOKALIZESUBWINDOWBASE_H
0012 
0013 #include <QHash>
0014 #include <QString>
0015 #include <QFile>
0016 #include <QFileInfo>
0017 #include <QDateTime>
0018 
0019 #include "actionproxy.h"
0020 
0021 #include <kmainwindow.h>
0022 #include <kxmlguiclient.h>
0023 
0024 
0025 /**
0026  * Interface for LokalizeMainWindow
0027  */
0028 class LokalizeSubwindowBase: public KMainWindow
0029 {
0030     Q_OBJECT
0031 public:
0032     explicit LokalizeSubwindowBase(QWidget* parent): KMainWindow(parent) {}
0033     virtual ~LokalizeSubwindowBase()
0034     {
0035         Q_EMIT aboutToBeClosed();
0036     }
0037     virtual KXMLGUIClient* guiClient() = 0;
0038     virtual void reloadUpdatedXML() = 0;
0039     virtual void setUpdatedXMLFile() = 0;
0040 
0041     //interface for LokalizeMainWindow
0042     virtual void hideDocks() = 0;
0043     virtual void showDocks() = 0;
0044     //bool queryClose();
0045 
0046     virtual QString currentFilePath()
0047     {
0048         return QString();
0049     }
0050 
0051 protected:
0052     void reflectNonApprovedCount(int count, int total);
0053     void reflectUntranslatedCount(int count, int total);
0054 
0055 Q_SIGNALS:
0056     void aboutToBeClosed();
0057 
0058 public:
0059     //QHash<QString,ActionProxy*> supportedActions;
0060     StatusBarProxy statusBarItems;
0061 
0062 protected:
0063     QDateTime lastXMLUpdate;
0064 };
0065 
0066 /**
0067  * C++ casting workaround
0068  */
0069 class LokalizeSubwindowBase2: public LokalizeSubwindowBase, public KXMLGUIClient
0070 {
0071 public:
0072     explicit LokalizeSubwindowBase2(QWidget* parent): LokalizeSubwindowBase(parent), KXMLGUIClient() {}
0073     ~LokalizeSubwindowBase2() override = default;
0074 
0075     KXMLGUIClient* guiClient() override
0076     {
0077         return (KXMLGUIClient*)this;
0078     }
0079 
0080     void setUpdatedXMLFile() override
0081     {
0082         QString localXml = guiClient()->localXMLFile();
0083         if (QFile::exists(localXml)) {
0084             lastXMLUpdate = QFileInfo(localXml).lastModified();
0085         }
0086     }
0087 
0088     void reloadUpdatedXML() override
0089     {
0090         QString localXml = guiClient()->localXMLFile();
0091         if (QFile::exists(localXml)) {
0092             QDateTime newXMLUpdate = QFileInfo(localXml).lastModified();
0093             if (newXMLUpdate > lastXMLUpdate) {
0094                 lastXMLUpdate = newXMLUpdate;
0095                 guiClient()->reloadXML();
0096             }
0097         }
0098     }
0099 };
0100 
0101 #endif