diff --git a/src/blackgui/textmessagetextedit.cpp b/src/blackgui/textmessagetextedit.cpp index f467244d8..226528495 100644 --- a/src/blackgui/textmessagetextedit.cpp +++ b/src/blackgui/textmessagetextedit.cpp @@ -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) diff --git a/src/blackgui/views/viewbase.cpp b/src/blackgui/views/viewbase.cpp index 372b72c22..202593c16 100644 --- a/src/blackgui/views/viewbase.cpp +++ b/src/blackgui/views/viewbase.cpp @@ -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 #include @@ -54,6 +55,7 @@ #include #include #include +#include #include #include @@ -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? @@ -371,8 +383,8 @@ namespace BlackGui } } - if (m_menus.testFlag(MenuCopy)) { menuActions.addActions(this->initMenuActions(MenuCopy)); } - if (m_menus.testFlag(MenuCut)) { menuActions.addActions(this->initMenuActions(MenuCut)); } + if (m_menus.testFlag(MenuCopy)) { menuActions.addActions(this->initMenuActions(MenuCopy)); } + if (m_menus.testFlag(MenuCut)) { menuActions.addActions(this->initMenuActions(MenuCut)); } if (m_menus.testFlag(MenuPaste)) { menuActions.addActions(this->initMenuActions(MenuPaste)); } if (m_menus.testFlag(MenuFont) && m_fontMenu) { @@ -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 + void CViewBase::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 CStatusMessage CViewBase::ps_loadJson(const QString &directory) { diff --git a/src/blackgui/views/viewbase.h b/src/blackgui/views/viewbase.h index 9af7db45b..950a0bb96 100644 --- a/src/blackgui/views/viewbase.h +++ b/src/blackgui/views/viewbase.h @@ -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 @@ -505,7 +519,8 @@ namespace BlackGui Menu m_menus = MenuDefault; //!< Default menu settings 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 + CLoadIndicator *m_loadIndicator = nullptr; //!< load indicator if needed + Components::CTextEditDialog *m_textEditDialog = nullptr; //!< text edit dialog QMap 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