Views: JSON values can be shown as popup

This commit is contained in:
Klaus Basan
2018-11-29 00:03:36 +01:00
parent 394147dcb9
commit 7035330744
3 changed files with 75 additions and 12 deletions

View File

@@ -59,7 +59,7 @@ namespace BlackGui
CTextMessageTextEdit::~CTextMessageTextEdit()
{ }
void CTextMessageTextEdit::insertTextMessage(const BlackMisc::Network::CTextMessage &textMessage, int maxMessages)
void CTextMessageTextEdit::insertTextMessage(const CTextMessage &textMessage, int maxMessages)
{
if (maxMessages < 0 && m_keepMaxMessages >= 0) { maxMessages = m_keepMaxMessages; }
if (maxMessages >= 0)

View File

@@ -7,22 +7,22 @@
* contained in the LICENSE file.
*/
#include "blackconfig/buildconfig.h"
#include "blackgui/dockwidgetinfoarea.h"
#include "blackgui/components/texteditdialog.h"
#include "blackgui/views/viewbase.h"
#include "blackgui/views/viewbaseproxystyle.h"
#include "blackgui/views/viewbaseitemdelegate.h"
#include "blackgui/filters/filterdialog.h"
#include "blackgui/filters/filterwidget.h"
#include "blackgui/guiapplication.h"
#include "blackgui/guiutility.h"
#include "blackgui/loadindicator.h"
#include "blackgui/models/allmodels.h"
#include "blackgui/models/allmodelcontainers.h"
#include "blackgui/menus/menuaction.h"
#include "blackgui/menus/menudelegate.h"
#include "blackgui/menus/fontmenus.h"
#include "blackgui/dockwidgetinfoarea.h"
#include "blackgui/guiapplication.h"
#include "blackgui/guiutility.h"
#include "blackgui/loadindicator.h"
#include "blackgui/shortcut.h"
#include "blackgui/views/viewbase.h"
#include "blackgui/views/viewbaseproxystyle.h"
#include "blackgui/views/viewbaseitemdelegate.h"
#include "blackmisc/fileutils.h"
#include "blackmisc/icons.h"
#include "blackmisc/logmessage.h"
@@ -30,6 +30,7 @@
#include "blackmisc/namevariantpairlist.h"
#include "blackmisc/propertyindexvariantmap.h"
#include "blackmisc/worker.h"
#include "blackconfig/buildconfig.h"
#include <QApplication>
#include <QAction>
@@ -54,6 +55,7 @@
#include <QShortcut>
#include <QVariant>
#include <QWidget>
#include <QTextEdit>
#include <QMetaMethod>
#include <limits>
@@ -64,6 +66,7 @@ using namespace BlackGui::Menus;
using namespace BlackGui::Models;
using namespace BlackGui::Filters;
using namespace BlackGui::Settings;
using namespace BlackGui::Components;
namespace BlackGui
{
@@ -342,6 +345,15 @@ namespace BlackGui
return directories.propertyByIndex(m_dirSettingsIndex).toQString();
}
Components::CTextEditDialog *CViewBaseNonTemplate::textEditDialog()
{
if (!m_textEditDialog)
{
m_textEditDialog = new CTextEditDialog(this);
}
return m_textEditDialog;
}
void CViewBaseNonTemplate::customMenu(CMenuActions &menuActions)
{
// delegate?
@@ -440,6 +452,16 @@ namespace BlackGui
a->setEnabled(!autoResize);
}
// export actions, display in text edit
if (CBuildConfig::isLocalDeveloperDebugBuild())
{
menuActions.addAction(CIcons::tableSheet16(), "Display as JSON", CMenuAction::pathViewLoadSave(), { this, &CViewBaseNonTemplate::displayJsonPopup });
if (this->hasSelection())
{
menuActions.addAction(CIcons::tableSheet16(), "Display selected as JSON", CMenuAction::pathViewLoadSave(), { this, &CViewBaseNonTemplate::displaySelectedJsonPopup });;
}
}
QAction *actionInteractiveResize = menuActions.addAction(CIcons::viewMultiColumn(), "Resize (auto)", CMenuAction::pathViewResize(), nullptr);
actionInteractiveResize->setObjectName(this->objectName().append("ActionResizing"));
actionInteractiveResize->setCheckable(true);
@@ -646,6 +668,16 @@ namespace BlackGui
}
}
void CViewBaseNonTemplate::displayJsonPopup()
{
}
void CViewBaseNonTemplate::displaySelectedJsonPopup()
{
}
void CViewBaseNonTemplate::ps_triggerReload()
{
this->showLoadIndicatorWithTimeout(m_loadIndicatorTimeoutMsDefault);
@@ -1617,6 +1649,17 @@ namespace BlackGui
return m;
}
template<class ModelClass, class ContainerType, class ObjectType>
void CViewBase<ModelClass, ContainerType, ObjectType>::displayContainerAsJsonPopup(bool selectedOnly)
{
const ContainerType container = selectedOnly ? this->selectedObjects() : this->container();
const QString json = container.toJsonString();
QTextEdit *te = this->textEditDialog()->textEdit();
te->setReadOnly(true);
te->setText(json);
this->textEditDialog()->show();
}
template <class ModelClass, class ContainerType, class ObjectType>
CStatusMessage CViewBase<ModelClass, ContainerType, ObjectType>::ps_loadJson(const QString &directory)
{

View File

@@ -70,6 +70,11 @@ namespace BlackGui
class CFilterWidget;
}
namespace Components
{
class CTextEditDialog;
}
namespace Views
{
//! Non templated base class, allows Q_OBJECT and signals / slots to be used
@@ -451,6 +456,12 @@ namespace BlackGui
//! Save JSON for action/menu, void return signatur
void saveSelectedJsonAction();
//! Display JSON data
virtual void displayJsonPopup() = 0;
//! Display JSON data
virtual void displaySelectedJsonPopup() = 0;
//! Load JSON for action/menu, void return signatur
void loadJsonAction();
@@ -483,6 +494,9 @@ namespace BlackGui
virtual void paste() = 0;
//! @}
//! Init text edit dialog if required and return pointer to it
Components::CTextEditDialog *textEditDialog();
ResizeMode m_resizeMode = PresizeSubset; //!< mode
RowsResizeMode m_rowResizeMode = Interactive; //!< row resize mode for row height
SelectionMode m_originalSelectionMode = this->selectionMode(); //!< Selection mode set
@@ -506,6 +520,7 @@ namespace BlackGui
Menus::IMenuDelegate *m_menu = nullptr; //!< custom menu if any
Menus::CFontMenu *m_fontMenu = nullptr; //!< font menu if applicable
CLoadIndicator *m_loadIndicator = nullptr; //!< load indicator if needed
Components::CTextEditDialog *m_textEditDialog = nullptr; //!< text edit dialog
QMap<MenuFlag, Menus::CMenuActions> m_menuFlagActions; //!< initialized actions
QString m_saveFileName; //!< save file name (JSON)
BlackMisc::CDirectories::ColumnIndex m_dirSettingsIndex = BlackMisc::CDirectories::IndexDirLastViewJsonOrDefault; //!< allows to set more specialized directories //!< remember last JSON directory, having this member allows to have specific dir
@@ -738,6 +753,8 @@ namespace BlackGui
virtual void copy() override;
virtual void cut() override;
virtual void paste() override;
virtual void displayJsonPopup() override { this->displayContainerAsJsonPopup(false); }
virtual void displaySelectedJsonPopup() override { this->displayContainerAsJsonPopup(true); }
//! @}
//! Modify JSON data loaded in BlackGui::Views::CViewBaseNonTemplate::ps_loadJson
@@ -756,6 +773,9 @@ namespace BlackGui
//! \copydoc BlackGui::Views::CViewBaseNonTemplate::customMenu
virtual BlackMisc::CStatusMessage loadJsonFile(const QString &fileName) override;
//! Display the container as JSON popup
virtual void displayContainerAsJsonPopup(bool selectedOnly);
// --------------------------------------------- SLOTS start here -----------------------------------------
//! \name Slot overrides from base class