Merge branch 'experimental/cleanup'

This commit is contained in:
2025-08-13 21:02:21 +02:00
24 changed files with 423 additions and 279 deletions

View File

@@ -30,12 +30,96 @@ namespace XQAppData
return static_cast<std::underlying_type_t<E>>(e); return static_cast<std::underlying_type_t<E>>(e);
} }
class XQAppIconMap : public QMap<QString,QIcon> class XQAppIconMap : public QMap<QString,QIcon>
{ {
public: public:
XQAppIconMap() = default;
void init() void init()
{ {
insert( "DirIcon" , QApplication::style()->standardIcon(QStyle::SP_DirIcon));
insert( "FileDialogBack", QApplication::style()->standardIcon(QStyle::SP_FileDialogBack));
insert( "FileDialogContentsView", QApplication::style()->standardIcon(QStyle::SP_FileDialogContentsView));
insert( "FileDialogDetailedView", QApplication::style()->standardIcon(QStyle::SP_FileDialogDetailedView));
insert( "icn05Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogEnd));
insert( "icn06Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogInfoView));
insert( "icn07Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogListView));
insert( "icn08Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogNewFolder));
insert( "icn09Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogStart));
insert( "icn10Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogToParent));
insert( "icn11Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowBack));
insert( "icn12Dummy", QApplication::style()->standardIcon(QStyle::SP_DirIcon));
insert( "icn13Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaSkipBackward));
insert( "icn14Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowDown));
insert( "icn15Dummy", QApplication::style()->standardIcon(QStyle::SP_DirLinkIcon));
insert( "icn16Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaSkipForward));
insert( "icn17Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowForward));
insert( "icn18Dummy", QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon));
insert( "icn19Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaStop));
insert( "icn20Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowLeft));
insert( "icn21Dummy", QApplication::style()->standardIcon(QStyle::SP_DockWidgetCloseButton));
insert( "icn22Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaVolume));
insert( "icn23Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowRight));
insert( "icn24Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveCDIcon));
insert( "icn25Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaVolumeMuted));
insert( "icn26Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowUp));
insert( "icn27Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveDVDIcon));
insert( "icn28Dummy", QApplication::style()->standardIcon(QStyle::SP_MessageBoxCritical));
insert( "icn29Dummy", QApplication::style()->standardIcon(QStyle::SP_BrowserReload));
insert( "icn30Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveFDIcon));
insert( "icn31Dummy", QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation));
insert( "icn32Dummy", QApplication::style()->standardIcon(QStyle::SP_BrowserStop));
insert( "icn33Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveHDIcon));
insert( "icn34Dummy", QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion));
insert( "icn35Dummy", QApplication::style()->standardIcon(QStyle::SP_CommandLink));
insert( "icn36Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveNetIcon));
insert( "icn37Dummy", QApplication::style()->standardIcon(QStyle::SP_MessageBoxWarning));
insert( "icn38Dummy", QApplication::style()->standardIcon(QStyle::SP_ComputerIcon));
insert( "icn39Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogBack));
insert( "icn40Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarCloseButton));
insert( "icn41Dummy", QApplication::style()->standardIcon(QStyle::SP_CustomBase));
insert( "icn42Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogContentsView));
insert( "icn43Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarContextHelpButton));
insert( "icn44Dummy", QApplication::style()->standardIcon(QStyle::SP_DesktopIcon));
insert( "icn45Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogDetailedView));
insert( "icn46Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarMaxButton));
insert( "icn47Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogApplyButton));
insert( "icn48Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogEnd));
insert( "icn49Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarMenuButton));
insert( "icn50Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton));
insert( "icn51Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogInfoView));
insert( "icn52Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarMinButton));
insert( "icn53Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogCloseButton));
insert( "icn54Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogListView));
insert( "icn55Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarNormalButton));
insert( "icn56Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogDiscardButton));
insert( "icn57Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogNewFolder));
insert( "icn58Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarShadeButton));
insert( "icn59Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogHelpButton));
insert( "icn60Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogStart));
insert( "icn61Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarUnshadeButton));
insert( "icn62Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogNoButton));
insert( "icn63Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogToParent));
insert( "icn64Dummy", QApplication::style()->standardIcon(QStyle::SP_ToolBarHorizontalExtensionButton));
insert( "icn65Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogOkButton));
insert( "FileIcon", QApplication::style()->standardIcon(QStyle::SP_FileIcon));
insert( "icn67Dummy", QApplication::style()->standardIcon(QStyle::SP_ToolBarVerticalExtensionButton));
insert( "icn68Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogResetButton));
insert( "icn70Dummy", QApplication::style()->standardIcon(QStyle::SP_FileLinkIcon));
insert( "TrashIcon", QApplication::style()->standardIcon(QStyle::SP_TrashIcon));
insert( "icn72Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogSaveButton));
insert( "icn73Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaPause));
insert( "icn74Dummy", QApplication::style()->standardIcon(QStyle::SP_VistaShield));
insert( "icn75Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogYesButton));
insert( "icn76Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaPlay));
insert( "icn77Dummy", QApplication::style()->standardIcon(QStyle::SP_DirClosedIcon));
insert( "icn79Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaSeekBackward));
insert( "DirHomeIcon", QApplication::style()->standardIcon(QStyle::SP_DirHomeIcon));
insert( "icn81Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaSeekForward));
/*
auto from = to_underlying(QIcon::ThemeIcon::AddressBookNew); auto from = to_underlying(QIcon::ThemeIcon::AddressBookNew);
auto to = to_underlying(QIcon::ThemeIcon::NThemeIcons); auto to = to_underlying(QIcon::ThemeIcon::NThemeIcons);
for (auto i = from; i < to; ++i) for (auto i = from; i < to; ++i)
@@ -46,10 +130,24 @@ namespace XQAppData
if (!icon.isNull()) if (!icon.isNull())
insert(icon.name(), icon); insert(icon.name(), icon);
} }
*/
} }
}; };
/*
Nein, so nicht! QApplication::style() gibts hier noch nicht -> aua!
static XQAppIconMap s_IconMap
{
{ "icnFolder" , QApplication::style()->standardIcon(QStyle::SP_DirIcon) }
}
*/
static XQAppIconMap s_IconMap; static XQAppIconMap s_IconMap;
bool hasTypeIcon(const QString& key ) bool hasTypeIcon(const QString& key )
@@ -69,84 +167,84 @@ namespace XQAppData
/* /*
{ "icnFolder" , QApplication::style()->standardIcon(QStyle::SP_DirIcon) }, { "icnFolder" , QApplication::style()->standardIcon(QStyle::SP_DirIcon) },
{ "icnFolder" , QApplication::style()->standardIcon(QStyle::SP_DirIcon)}, { "icnFolder" , QApplication::style()->standardIcon(QStyle::SP_DirIcon");
{ "icn02Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogBack)}, { "icn02Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogBack");
{ "icn03Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogContentsView)}, { "icn03Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogContentsView");
{ "icn04Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogDetailedView)}, { "icn04Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogDetailedView");
{ "icn05Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogEnd)}, { "icn05Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogEnd");
{ "icn06Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogInfoView)}, { "icn06Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogInfoView");
{ "icn07Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogListView)}, { "icn07Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogListView");
{ "icn08Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogNewFolder)}, { "icn08Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogNewFolder");
{ "icn09Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogStart)}, { "icn09Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogStart");
{ "icn10Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogToParent)}, { "icn10Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogToParent");
{ "icn11Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowBack)}, { "icn11Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowBack");
{ "icn12Dummy", QApplication::style()->standardIcon(QStyle::SP_DirIcon)}, { "icn12Dummy", QApplication::style()->standardIcon(QStyle::SP_DirIcon");
{ "icn13Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaSkipBackward)}, { "icn13Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaSkipBackward");
{ "icn14Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowDown)}, { "icn14Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowDown");
{ "icn15Dummy", QApplication::style()->standardIcon(QStyle::SP_DirLinkIcon)}, { "icn15Dummy", QApplication::style()->standardIcon(QStyle::SP_DirLinkIcon");
{ "icn16Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaSkipForward)}, { "icn16Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaSkipForward");
{ "icn17Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowForward)}, { "icn17Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowForward");
{ "icn18Dummy", QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon)}, { "icn18Dummy", QApplication::style()->standardIcon(QStyle::SP_DirOpenIcon");
{ "icn19Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaStop)}, { "icn19Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaStop");
{ "icn20Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowLeft)}, { "icn20Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowLeft");
{ "icn21Dummy", QApplication::style()->standardIcon(QStyle::SP_DockWidgetCloseButton)}, { "icn21Dummy", QApplication::style()->standardIcon(QStyle::SP_DockWidgetCloseButton");
{ "icn22Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaVolume)}, { "icn22Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaVolume");
{ "icn23Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowRight)}, { "icn23Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowRight");
{ "icn24Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveCDIcon)}, { "icn24Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveCDIcon");
{ "icn25Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaVolumeMuted)}, { "icn25Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaVolumeMuted");
{ "icn26Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowUp)}, { "icn26Dummy", QApplication::style()->standardIcon(QStyle::SP_ArrowUp");
{ "icn27Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveDVDIcon)}, { "icn27Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveDVDIcon");
{ "icn28Dummy", QApplication::style()->standardIcon(QStyle::SP_MessageBoxCritical)}, { "icn28Dummy", QApplication::style()->standardIcon(QStyle::SP_MessageBoxCritical");
{ "icn29Dummy", QApplication::style()->standardIcon(QStyle::SP_BrowserReload)}, { "icn29Dummy", QApplication::style()->standardIcon(QStyle::SP_BrowserReload");
{ "icn30Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveFDIcon)}, { "icn30Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveFDIcon");
{ "icn31Dummy", QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation)}, { "icn31Dummy", QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation");
{ "icn32Dummy", QApplication::style()->standardIcon(QStyle::SP_BrowserStop)}, { "icn32Dummy", QApplication::style()->standardIcon(QStyle::SP_BrowserStop");
{ "icn33Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveHDIcon)}, { "icn33Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveHDIcon");
{ "icn34Dummy", QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion)}, { "icn34Dummy", QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion");
{ "icn35Dummy", QApplication::style()->standardIcon(QStyle::SP_CommandLink)}, { "icn35Dummy", QApplication::style()->standardIcon(QStyle::SP_CommandLink");
{ "icn36Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveNetIcon)}, { "icn36Dummy", QApplication::style()->standardIcon(QStyle::SP_DriveNetIcon");
{ "icn37Dummy", QApplication::style()->standardIcon(QStyle::SP_MessageBoxWarning)}, { "icn37Dummy", QApplication::style()->standardIcon(QStyle::SP_MessageBoxWarning");
{ "icn38Dummy", QApplication::style()->standardIcon(QStyle::SP_ComputerIcon)}, { "icn38Dummy", QApplication::style()->standardIcon(QStyle::SP_ComputerIcon");
{ "icn39Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogBack)}, { "icn39Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogBack");
{ "icn40Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarCloseButton)}, { "icn40Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarCloseButton");
{ "icn41Dummy", QApplication::style()->standardIcon(QStyle::SP_CustomBase)}, { "icn41Dummy", QApplication::style()->standardIcon(QStyle::SP_CustomBase");
{ "icn42Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogContentsView)}, { "icn42Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogContentsView");
{ "icn43Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarContextHelpButton)}, { "icn43Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarContextHelpButton");
{ "icn44Dummy", QApplication::style()->standardIcon(QStyle::SP_DesktopIcon)}, { "icn44Dummy", QApplication::style()->standardIcon(QStyle::SP_DesktopIcon");
{ "icn45Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogDetailedView)}, { "icn45Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogDetailedView");
{ "icn46Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarMaxButton)}, { "icn46Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarMaxButton");
{ "icn47Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogApplyButton)}, { "icn47Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogApplyButton");
{ "icn48Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogEnd)}, { "icn48Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogEnd");
{ "icn49Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarMenuButton)}, { "icn49Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarMenuButton");
{ "icn50Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)}, { "icn50Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton");
{ "icn51Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogInfoView)}, { "icn51Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogInfoView");
{ "icn52Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarMinButton)}, { "icn52Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarMinButton");
{ "icn53Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogCloseButton)}, { "icn53Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogCloseButton");
{ "icn54Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogListView)}, { "icn54Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogListView");
{ "icn55Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarNormalButton)}, { "icn55Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarNormalButton");
{ "icn56Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogDiscardButton)}, { "icn56Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogDiscardButton");
{ "icn57Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogNewFolder)}, { "icn57Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogNewFolder");
{ "icn58Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarShadeButton)}, { "icn58Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarShadeButton");
{ "icn59Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogHelpButton)}, { "icn59Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogHelpButton");
{ "icn60Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogStart)}, { "icn60Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogStart");
{ "icn61Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarUnshadeButton)}, { "icn61Dummy", QApplication::style()->standardIcon(QStyle::SP_TitleBarUnshadeButton");
{ "icn62Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogNoButton)}, { "icn62Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogNoButton");
{ "icn63Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogToParent)}, { "icn63Dummy", QApplication::style()->standardIcon(QStyle::SP_FileDialogToParent");
{ "icn64Dummy", QApplication::style()->standardIcon(QStyle::SP_ToolBarHorizontalExtensionButton)}, { "icn64Dummy", QApplication::style()->standardIcon(QStyle::SP_ToolBarHorizontalExtensionButton");
{ "icn65Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)}, { "icn65Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogOkButton");
{ "icn66Dummy", QApplication::style()->standardIcon(QStyle::SP_FileIcon)}, { "icn66Dummy", QApplication::style()->standardIcon(QStyle::SP_FileIcon");
{ "icn67Dummy", QApplication::style()->standardIcon(QStyle::SP_ToolBarVerticalExtensionButton)}, { "icn67Dummy", QApplication::style()->standardIcon(QStyle::SP_ToolBarVerticalExtensionButton");
{ "icn68Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogResetButton)}, { "icn68Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogResetButton");
{ "icn70Dummy", QApplication::style()->standardIcon(QStyle::SP_FileLinkIcon)}, { "icn70Dummy", QApplication::style()->standardIcon(QStyle::SP_FileLinkIcon");
{ "icn71Dummy", QApplication::style()->standardIcon(QStyle::SP_TrashIcon)}, { "icn71Dummy", QApplication::style()->standardIcon(QStyle::SP_TrashIcon");
{ "icn72Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogSaveButton)}, { "icn72Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogSaveButton");
{ "icn73Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaPause)}, { "icn73Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaPause");
{ "icn74Dummy", QApplication::style()->standardIcon(QStyle::SP_VistaShield)}, { "icn74Dummy", QApplication::style()->standardIcon(QStyle::SP_VistaShield");
{ "icn75Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogYesButton)}, { "icn75Dummy", QApplication::style()->standardIcon(QStyle::SP_DialogYesButton");
{ "icn76Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaPlay)}, { "icn76Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaPlay");
{ "icn77Dummy", QApplication::style()->standardIcon(QStyle::SP_DirClosedIcon)}, { "icn77Dummy", QApplication::style()->standardIcon(QStyle::SP_DirClosedIcon");
{ "icn79Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaSeekBackward)}, { "icn79Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaSeekBackward");
{ "icn80Dummy", QApplication::style()->standardIcon(QStyle::SP_DirHomeIcon)}, { "icn80Dummy", QApplication::style()->standardIcon(QStyle::SP_DirHomeIcon");
{ "icn81Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaSeekForward)} { "icn81Dummy", QApplication::style()->standardIcon(QStyle::SP_MediaSeekForward)}
} }
*/ */

View File

@@ -24,6 +24,10 @@
const QString c_Version = "0.1.1 04.09.2024"; const QString c_Version = "0.1.1 04.09.2024";
const QString c_ItemType = "ItemType";
const QString c_Caption = "Caption";
const QString c_Header = "Header";
const QString c_MainModelName = "DocumentTreeModel"; const QString c_MainModelName = "DocumentTreeModel";
const QString c_ChildModelName = "DocumentDetailsModel"; const QString c_ChildModelName = "DocumentDetailsModel";
const QString c_ProjectID = "ProjectID"; const QString c_ProjectID = "ProjectID";
@@ -40,7 +44,7 @@ const QString c_FriendlyName = "FriendlyName";
namespace XQAppData namespace XQAppData
{ {
class XQAppIconMap; //class XQAppIconMap;
bool hasTypeIcon(const QString& key ); bool hasTypeIcon(const QString& key );
QIcon typeIcon(const QString& key ); QIcon typeIcon(const QString& key );

View File

@@ -36,7 +36,7 @@ XQChildModel::XQChildModel( QObject *parent )
void XQChildModel::initModel(const QString& modelName) void XQChildModel::initModel(const QString& modelName)
{ {
auto extendItemType = [=](const XQNodePtr& entry) auto extendItemType = [=,this](const XQNodePtr& entry)
{ {
const QString& typeName = entry->attribute("ItemType"); const QString& typeName = entry->attribute("ItemType");
XQItemType* itemType = _itemFactory.findItemTypeTemplate( typeName); // throws XQItemType* itemType = _itemFactory.findItemTypeTemplate( typeName); // throws
@@ -138,24 +138,6 @@ void XQChildModel::setContent( const XQNodePtr& contentRoot )
} }
//! firz
void XQChildModel::createModelContentChildRow( QStandardItem* parent, XQNodePtr contentNode )
{
/*
parent->appendRow( { new XQItem("Optionals", XQItemType::HeaderStyle ), new XQItem( "Value", XQItemType::HeaderStyle )} );
for( auto& child : contentNode->children() )
{
XQItemList list;
list.append( new XQItem( child->attribute("DataItem"), XQItemType::StaticStyle ) );
list.append( new XQItem( child->attribute("DataValue"), XQItemType::StaticStyle ) );
parent->appendRow( list );
}
*/
}
//! erzeugt ein adhoc-contextmenu, je nachdem welche aktionen gerade möflich sind. //! erzeugt ein adhoc-contextmenu, je nachdem welche aktionen gerade möflich sind.
void XQChildModel::initContextMenu() void XQChildModel::initContextMenu()

View File

@@ -34,7 +34,7 @@ public:
protected: protected:
virtual void createModelContentChildRow(QStandardItem* parent, XQNodePtr contentNode );
//void setupViewProperties() override; //void setupViewProperties() override;
void initContextMenu() override; void initContextMenu() override;

View File

@@ -16,7 +16,7 @@
#include <xqitem.h> #include <xqitem.h>
#include <QFile> #include <QFile>
//! firz //! erzeugt ein docukument
XQDocument::XQDocument(const QString& aFileName, const QString& aFriendlyName, XQItem* aTreeItem, XQViewModel* aModelView ) XQDocument::XQDocument(const QString& aFileName, const QString& aFriendlyName, XQItem* aTreeItem, XQViewModel* aModelView )
: fileName{ aFileName }, friendlyName{ aFriendlyName }, treeItem{ aTreeItem }, modelView{ aModelView } : fileName{ aFileName }, friendlyName{ aFriendlyName }, treeItem{ aTreeItem }, modelView{ aModelView }
@@ -24,12 +24,6 @@ XQDocument::XQDocument(const QString& aFileName, const QString& aFriendlyName, X
} }
//! firz
XQDocument::~XQDocument()
{
//delete _documentRoot;
}
/// ///
@@ -37,7 +31,7 @@ XQDocument::~XQDocument()
/// ///
//! firz //! destruktor
XQDocumentStore::~XQDocumentStore() XQDocumentStore::~XQDocumentStore()
{ {
@@ -48,11 +42,11 @@ XQDocumentStore::~XQDocumentStore()
} }
//! firz //! erzeugt ein document eintrag
void XQDocumentStore::addDocument( const QString& aFileName, const QString& aFriendlyName, XQItem* aTreeItem, XQViewModel* aModelView ) void XQDocumentStore::addDocument( const QString& aFileName, const QString& aFriendlyName, XQItem* aTreeItem, XQViewModel* aModelView )
{ {
XQDocument newDocument( aFileName, aFriendlyName, aTreeItem,aModelView ); XQDocument newDocument( aFileName, aFriendlyName, aTreeItem, aModelView );
addAtKey( aFileName, newDocument ); addAtKey( aFileName, newDocument );
// attention: this assumes the presence of the 'ProjectID' value // attention: this assumes the presence of the 'ProjectID' value
//addAlias( aFileName, aTreeItem->attribute(c_ProjectID) ); //addAlias( aFileName, aTreeItem->attribute(c_ProjectID) );

View File

@@ -28,7 +28,7 @@ struct XQDocument
XQDocument() = default; XQDocument() = default;
XQDocument( const QString& aFileName, const QString& aFriendlyName, XQItem* aTreeItem, XQViewModel* aModelView ); XQDocument( const QString& aFileName, const QString& aFriendlyName, XQItem* aTreeItem, XQViewModel* aModelView );
virtual ~XQDocument(); virtual ~XQDocument() = default;
QString fileName; // also used as key QString fileName; // also used as key
QString friendlyName; QString friendlyName;

View File

@@ -38,17 +38,22 @@ XQMainModel::XQMainModel(QObject *parent )
void XQMainModel::initModel(const QString& modelName) void XQMainModel::initModel(const QString& modelName)
{ {
XQNodePtr modelSheet = _itemFactory.findModelSheet( modelName );
// #1: create structure: create static sections for this model // model rootnode finden -> <DocumentTreeModel>
for( auto& sheetNode : modelSheet->children() ) XQNodePtr modelSheet = _itemFactory.findModelSheet( modelName ); // throws
// #1: über alle sections
for( auto& section : modelSheet->children() )
{ {
qDebug() << " create main model: " << sheetNode->tag_name(); // #2: (optionalen) header erzeugen
const XQNodePtr header = section->find_child_by_tag_name( "Header");
if( header )
{
XQItemList list = _itemFactory.makeHeader( header );
Q_ASSERT(!list.isEmpty());
addSection(list, section );
}
XQItemList list = { _itemFactory.makeHeaderItem( sheetNode ) };
Q_ASSERT(!list.isEmpty());
addSection(list, sheetNode );
//appendRow( list );
} }
} }
@@ -77,7 +82,7 @@ XQItem* XQMainModel::createTreeEntry( XQNodePtr contentNode )
throw XQException( "createTreeEntry: main model should not be emtpy!" ); throw XQException( "createTreeEntry: main model should not be emtpy!" );
} }
//! firz //! leere default implementation
void XQMainModel::initContextMenu() void XQMainModel::initContextMenu()
{ {

View File

@@ -135,19 +135,6 @@ XQItem* XQItemFactory::makeHeaderItem( const XQNodePtr& sheetEntry )
} }
XQItem* XQItemFactory::makeContentItem( const XQNodePtr& contentNode, const XQNodePtr& sheetEntry )
{
// den itemtype des neuen items rausfinden
QString typeKey = sheetEntry->attribute("ItemType");
//XQItemType* itemType = findItemTypeTemplate(typeKey); // throws
XQItemType* itemType = makeItemType(sheetEntry); // throws
const QString* contentPtr = contentNode->attribute_ptr( sheetEntry->tag_name() );
return new XQItem( itemType, contentPtr );
}
XQItem* XQItemFactory::makeTreeChildItem( const XQNodePtr& contentNode, const XQNodePtr& sheetEntry ) XQItem* XQItemFactory::makeTreeChildItem( const XQNodePtr& contentNode, const XQNodePtr& sheetEntry )
{ {
@@ -295,6 +282,56 @@ QVariant XQItemFactory::makeVariant( int dataRole, const QString& source ) const
/// ------------------------------------------------ /// ------------------------------------------------
/// ///
XQItem* XQItemFactory::makeContentItem( const XQNodePtr& contentNode, const XQNodePtr& sheetEntry )
{
// den itemtype des neuen items rausfinden
QString typeKey = sheetEntry->attribute(c_ItemType);
//XQItemType* itemType = findItemTypeTemplate(typeKey); // throws
XQItemType* itemType = makeItemType(sheetEntry); // throws
// das ist Unterschied zum normalen Item: Der Titel kommt aus der Modelbeschreibung
const QString* contentPtr = contentNode->attribute_ptr( sheetEntry->tag_name() );
return new XQItem( itemType, contentPtr );
}
XQItem* XQItemFactory::makeItem( const XQNodePtr& sheetNode, const XQNodePtr& contentNode )
{
// den itemtype des neuen items rausfinden
QString typeKey = sheetNode->attribute(c_ItemType);
//XQItemType* itemType = makeItemType(sheetEntry); // throws
XQItemType* itemType = findItemTypeTemplate(typeKey);
// fallunterscheidung beim inhalt:
const QString* contentPtr{};
// das ist Unterschied zum normalen Item: Der Titel kommt aus der Modelbeschreibung
if(!contentNode)
contentPtr = sheetNode->attribute_ptr(c_Caption);
else
// der content wird indirect über den tag-name des sheetnode geholt
contentPtr = contentNode->attribute_ptr( sheetNode->tag_name() );
return new XQItem( itemType, contentPtr );
}
XQItemList XQItemFactory::makeHeader( const XQNodePtr& headerNode )
{
XQItemList list;
for( const auto& headerEntry : headerNode->children() )
{
qDebug() << " --- headerEntry: " << headerEntry->tag_name() << ": " << headerEntry->attribute( "ItemType") << headerEntry->attribute( "Caption");
XQItem* headerItem = makeItem( headerEntry );
list.append( headerItem );
}
return list;
}
XQItemList XQItemFactory::makeHeaderRow( const XQNodePtr& sheetNode ) XQItemList XQItemFactory::makeHeaderRow( const XQNodePtr& sheetNode )
{ {
XQItemList list; XQItemList list;

View File

@@ -32,15 +32,20 @@ public:
XQNodePtr findModelSheet( const QString& modelName ) const; XQNodePtr findModelSheet( const QString& modelName ) const;
XQItem* makeHeaderItem(const XQNodePtr& typeSheetNode ); XQItem* makeHeaderItem(const XQNodePtr& typeSheetNode );
XQItem* makeContentItem( const XQNodePtr& contentNode, const XQNodePtr& sheetEntry ); XQItem* makeContentItem( const XQNodePtr& contentNode, const XQNodePtr& sheetEntry );
XQItem* makeTreeChildItem( const XQNodePtr& contentNode, const XQNodePtr& sheetEntry ); XQItem* makeTreeChildItem( const XQNodePtr& contentNode, const XQNodePtr& sheetEntry );
virtual XQItemList makeHeaderRow( const XQNodePtr& sheetNode ); XQItem* makeItem( const XQNodePtr& sheetNode, const XQNodePtr& contentNode=nullptr);
virtual XQItemList makeContentRow( const XQNodePtr& contentNode, const XQNodePtr& sheetNode ); XQItemList makeHeader( const XQNodePtr& sheetNode );
virtual XQItemList makeEmptyRow( const XQNodePtr& contentNode, const XQNodePtr& sheetNode );
XQItemList makeHeaderRow( const XQNodePtr& sheetNode );
XQItemList makeContentRow( const XQNodePtr& contentNode, const XQNodePtr& sheetNode );
XQItemList makeEmptyRow( const XQNodePtr& contentNode, const XQNodePtr& sheetNode );
// wozu ist das gut? // wozu ist das gut?
virtual XQItemList createGenericRow( const XQNodePtr& contentNode, const XQNodePtr& sheetNode ); XQItemList createGenericRow( const XQNodePtr& contentNode, const XQNodePtr& sheetNode );
void setItemDataFromString( XQItem& item, const QString& roleKey, const QString& source ) const; void setItemDataFromString( XQItem& item, const QString& roleKey, const QString& source ) const;

View File

@@ -125,6 +125,9 @@ XQItemType* XQItemType::replaceAttribute( const QVariant& newValue, int role )
} }
//! formatiert den content() string eines items.
QVariant XQItemType::formatText( const XQItem& item ) const QVariant XQItemType::formatText( const XQItem& item ) const
{ {
XQItem::UnitType uType = unitType(); XQItem::UnitType uType = unitType();
@@ -134,7 +137,8 @@ QVariant XQItemType::formatText( const XQItem& item ) const
return cont; return cont;
} }
//! firz
//! formatiert einen zahlenwert als string mit einheit.
QString XQItemType::formatToSI( const QString& valueTxt, XQItem::UnitType unitType ) const QString XQItemType::formatToSI( const QString& valueTxt, XQItem::UnitType unitType ) const
{ {
@@ -172,7 +176,8 @@ QString XQItemType::formatToSI( const QString& valueTxt, XQItem::UnitType unitTy
} }
//! firz
//! entfernt die einheit aus einem formatierten string
QString XQItemType::unFormatFromSI(const QString& formText ) const QString XQItemType::unFormatFromSI(const QString& formText ) const
{ {

View File

@@ -17,7 +17,7 @@
#include <xqtreetable.h> #include <xqtreetable.h>
//! firz //! hilfsfunktion: zeigt alle position und die zugehörigen knoten an.
void XQNodeStore::dumpList( const QString& title ) const void XQNodeStore::dumpList( const QString& title ) const
{ {
@@ -37,7 +37,7 @@ XQCommand::XQCommand(CmdType cmdType, XQViewModel* modelView )
} }
//! firz //! destruktor
XQCommand::~XQCommand() XQCommand::~XQCommand()
{ {

View File

@@ -18,7 +18,7 @@
//! firz //! hilfsfunktion: gibt diesen teilbaum rekursiv aus
void inspect( const XQNodePtr& node, int indent ) void inspect( const XQNodePtr& node, int indent )
{ {
@@ -34,9 +34,7 @@ void inspect( const XQNodePtr& node, int indent )
} }
//! operator<< für QString und std::ostream
//! firz
// Overload the operator<< for MyClass and std::ostream // Overload the operator<< for MyClass and std::ostream
std::ostream& operator<<(std::ostream& os, const QString& obj) std::ostream& operator<<(std::ostream& os, const QString& obj)
@@ -47,7 +45,8 @@ std::ostream& operator<<(std::ostream& os, const QString& obj)
} }
//! firz //! 'QString' implementation von split
template<> template<>
bool znode::zpayload<QString>::xstr_split_by(const QString& entry, const QString& sep, QString& key, QString& value ) bool znode::zpayload<QString>::xstr_split_by(const QString& entry, const QString& sep, QString& key, QString& value )
{ {
@@ -60,7 +59,7 @@ bool znode::zpayload<QString>::xstr_split_by(const QString& entry, const QString
} }
//! firz //! 'QString' implementation von substr
template<> template<>
QString znode::zpayload<QString>::xstr_sub_str( const QString& entry, int pos ) const QString znode::zpayload<QString>::xstr_sub_str( const QString& entry, int pos ) const
@@ -69,7 +68,7 @@ QString znode::zpayload<QString>::xstr_sub_str( const QString& entry, int pos )
} }
//! firz //! 'QString' implementation vom test auf 'empty'
template<> template<>
bool znode::zpayload<QString>::xstr_is_empty(const QString& entry ) const bool znode::zpayload<QString>::xstr_is_empty(const QString& entry ) const
@@ -78,7 +77,7 @@ bool znode::zpayload<QString>::xstr_is_empty(const QString& entry ) const
} }
//! firz //! 'QString' varianten der keystrings.
template<> template<>
const QString znode::zpayload<QString>::cType = "Type"; const QString znode::zpayload<QString>::cType = "Type";

View File

@@ -22,7 +22,7 @@
//! firz //! schreibt einen (teil)baum in ein file
void XQNodeWriter::dumpTree( XQNodePtr rootNode, const QString& fileName ) const void XQNodeWriter::dumpTree( XQNodePtr rootNode, const QString& fileName ) const
{ {
@@ -40,7 +40,8 @@ void XQNodeWriter::dumpTree( XQNodePtr rootNode, const QString& fileName ) const
treeFile.close(); treeFile.close();
} }
//! firz
//! schreibt einen knoten in einen stream
void XQNodeWriter::dumpNode( QXmlStreamWriter& writer, XQNodePtr node ) const void XQNodeWriter::dumpNode( QXmlStreamWriter& writer, XQNodePtr node ) const
{ {

View File

@@ -17,7 +17,7 @@
//! firz //! konstruiert ein selectionmodel.
XQSelectionModel::XQSelectionModel(QAbstractItemModel* model) XQSelectionModel::XQSelectionModel(QAbstractItemModel* model)
: QItemSelectionModel(model) : QItemSelectionModel(model)
@@ -26,7 +26,7 @@ XQSelectionModel::XQSelectionModel(QAbstractItemModel* model)
} }
//! firz //! konstruiert ein selectionmodel.
XQSelectionModel::XQSelectionModel(QAbstractItemModel* model, QObject* parent) XQSelectionModel::XQSelectionModel(QAbstractItemModel* model, QObject* parent)
: QItemSelectionModel(model, parent) : QItemSelectionModel(model, parent)
@@ -40,7 +40,7 @@ XQSelectionModel::XQSelectionModel(QAbstractItemModel* model, QObject* parent)
void XQSelectionModel::select(const QItemSelection& selection, QItemSelectionModel::SelectionFlags command) void XQSelectionModel::select(const QItemSelection& selection, QItemSelectionModel::SelectionFlags command)
{ {
// step #0: fetch selected indices. // step #0: fetch selected indices.
QModelIndexList list = selection.indexes(); const QModelIndexList list = selection.indexes();
if (list.isEmpty() || selectedRows().isEmpty() ) if (list.isEmpty() || selectedRows().isEmpty() )
return QItemSelectionModel::select(selection, command); return QItemSelectionModel::select(selection, command);

View File

@@ -16,7 +16,7 @@
#include <xqviewmodel.h> #include <xqviewmodel.h>
//! firz //! true, wenn paste an er stelle 'curIdx' möglich ist.
bool XQSimpleClipBoard::canPaste( const QModelIndex& curIdx ) const bool XQSimpleClipBoard::canPaste( const QModelIndex& curIdx ) const
{ {
@@ -38,7 +38,9 @@ bool XQSimpleClipBoard::canPaste( const QModelIndex& curIdx ) const
} }
//! firz //! erzeugt eine positions-list aus der liste selectierter indicies.
//! Der mit seiner position zusammen gespeicherter knoten muss hier
//! gekloned werden.
void XQSimpleClipBoard::saveNodes( const QModelIndexList& list ) void XQSimpleClipBoard::saveNodes( const QModelIndexList& list )
{ {

View File

@@ -30,7 +30,7 @@
//Q_GLOBAL_STATIC(XQItem,s_dummyItem) //Q_GLOBAL_STATIC(XQItem,s_dummyItem)
//! firz //! hilfsfunkion, zeigt den string-content() für alle elemente der liste
void showItemList( const XQItemList& list) void showItemList( const XQItemList& list)
{ {
@@ -40,14 +40,7 @@ void showItemList( const XQItemList& list)
} }
//! firz //! Konstruktur mit parent.
XQViewModel::~XQViewModel()
{
}
//! firz
XQViewModel::XQViewModel( QObject* parent ) XQViewModel::XQViewModel( QObject* parent )
: QStandardItemModel{ parent }, _itemFactory{ XQItemFactory::instance() } : QStandardItemModel{ parent }, _itemFactory{ XQItemFactory::instance() }
@@ -57,7 +50,7 @@ XQViewModel::XQViewModel( QObject* parent )
} }
//! firz //! gibt einen static-cast<QXItem*> auf 'invisibleRootItem()' zurück
const XQItem& XQViewModel::xqRootItem() const XQItem& XQViewModel::xqRootItem()
{ {
@@ -70,7 +63,7 @@ const XQItem& XQViewModel::xqRootItem()
} }
//! firz //! hifsfunktion, die das item zu einen index zurückgibt
XQItem& XQViewModel::xqItemFromIndex(const QModelIndex& index) const XQItem& XQViewModel::xqItemFromIndex(const QModelIndex& index) const
{ {
@@ -83,14 +76,68 @@ XQItem& XQViewModel::xqItemFromIndex(const QModelIndex& index) const
return XQItem::fallBackDummyItem(); return XQItem::fallBackDummyItem();
} }
//! firz //! hilfsfunktiom, die das erste xqitem einer zeile zurückgibt.
XQItem& XQViewModel::xqFirstItem(int row) const XQItem& XQViewModel::xqFirstItem(int row) const
{ {
return *static_cast<XQItem*>( QStandardItemModel::item(row) ); return *static_cast<XQItem*>( QStandardItemModel::item(row) );
} }
//! firz //! create the own model structure
void XQViewModel::initModel( const QString& modelName)
{
/*
model
section
header
section
...
*/
/*
// #0: Wir suchen die Model-Beschreibung
XQNodePtr modelSheet = _itemFactory.findModelSheet( modelName ); // throws
// #1: Wir erzeugen die Model-Struktur: Jedes Kind beschreibt einen
// XML-Datentyp, z.B. <Panel atr1="..." />, <Battery .../>
// Jeder XML-Knoten entspricht einer Zeile im späteren Model, jedes
// Attribut wird einem eigenen Feld (XQItem) abgebildet.
for( const auto& sheetNode : modelSheet->children() )
{
XQItemList list = _itemFactory.makeHeaderRow( sheetNode );
// für jeden XML-Knotentyp in der Modelbeschreibung erzeugen wir eine section
addSection(list, sheetNode );
// jedes kind kann enthält einen itemType und einen headerItemType. Für
// diese sind eventuell weitere attribute vorhanden, die die im type
// enthaltenen defualt-werte überschreiben.
for( const auto& sheetChild : sheetNode->children() )
{
//qDebug() << "---- kloppo: " << sheetChild->tag_name() << ": " << sheetChild->to_string();
extendItemType( sheetChild );
}
// empty row:
//XQNodePtr contentNode = XQNode::make_node( sheetNode->tag_name() );
//XQItemList emptyRow = _itemFactory.makeEmptyRow( contentNode, sheetNode );
//appendRow( emptyRow );
} // for
*/
}
//! SLOT, der aufgerufen wird, wenn eine edit-action getriggert wurde.
void XQViewModel::onActionTriggered(QAction* action) void XQViewModel::onActionTriggered(QAction* action)
{ {
@@ -138,12 +185,7 @@ void XQViewModel::onActionTriggered(QAction* action)
} }
/** //! führt die 'redo' action des gegebenen commnds aus.
* @brief XQViewModel::onCommandRedo called to execute a command ('do').
* @param command the current command
*/
//! firz
void XQViewModel::onCommandRedo( XQCommand& command ) void XQViewModel::onCommandRedo( XQCommand& command )
{ {
@@ -182,12 +224,7 @@ void XQViewModel::onCommandRedo( XQCommand& command )
} }
/** //! führt die 'undo' action des gegebenen commnds aus.
* @brief XQViewModel::onCommandUndo: called to 'undo' a command.
* @param command the command to be undone.
*/
//! firz
void XQViewModel::onCommandUndo( XQCommand& command ) void XQViewModel::onCommandUndo( XQCommand& command )
{ {
@@ -341,7 +378,7 @@ void XQViewModel::cmdPasteUndo( XQCommand& command )
// don't clone into clipboard, remove items // don't clone into clipboard, remove items
//! firz //! entfernen der selection ohne copy in clipboard.
void XQViewModel::cmdDelete( XQCommand& command ) void XQViewModel::cmdDelete( XQCommand& command )
{ {
@@ -358,7 +395,7 @@ void XQViewModel::cmdDelete( XQCommand& command )
} }
} }
//! firz //! macht 'delete' wirder rückgängig.
void XQViewModel::cmdDeleteUndo( XQCommand& command ) void XQViewModel::cmdDeleteUndo( XQCommand& command )
{ {
@@ -366,12 +403,7 @@ void XQViewModel::cmdDeleteUndo( XQCommand& command )
} }
/** //! legt eine neue, leere zeile an.
* @brief XQViewModel::cmdNewRow create one new item row
* @param command the command
*/
//! firz
void XQViewModel::cmdNew( XQCommand& command ) void XQViewModel::cmdNew( XQCommand& command )
{ {
@@ -407,14 +439,14 @@ void XQViewModel::cmdNew( XQCommand& command )
*/ */
} }
//! firz //! entfernt die neu angelegte zeile.
void XQViewModel::cmdNewUndo( XQCommand& command ) void XQViewModel::cmdNewUndo( XQCommand& command )
{ {
} }
//! firz //! schaltet eine section sichtbar oder unsichtbar.
void XQViewModel::cmdToggleSection( const QModelIndex& index ) void XQViewModel::cmdToggleSection( const QModelIndex& index )
{ {
@@ -458,12 +490,8 @@ void XQViewModel::setTreeTable(XQTreeTable* mainView )
setupViewProperties(); setupViewProperties();
} }
/**
* @brief XQViewModel::setupViewProperties set the tree views' properties: context menu policy,
* edit triggers and so on.
*/
//! firz //! setzt die eigenschaften der TreeTable.
void XQViewModel::setupViewProperties() void XQViewModel::setupViewProperties()
{ {
@@ -476,7 +504,7 @@ void XQViewModel::setupViewProperties()
} }
//! firz //! füg eine section mit header hinzu.
void XQViewModel::addSection( const XQItemList& list, const XQNodePtr& sheetNode ) void XQViewModel::addSection( const XQItemList& list, const XQNodePtr& sheetNode )
{ {
@@ -485,7 +513,7 @@ void XQViewModel::addSection( const XQItemList& list, const XQNodePtr& sheetNode
} }
//! firz //! gibt den undo-stack zurück.
QUndoStack* XQViewModel::undoStack() QUndoStack* XQViewModel::undoStack()
{ {
@@ -493,7 +521,7 @@ QUndoStack* XQViewModel::undoStack()
} }
//! firz //! setzt den undo-stack.
void XQViewModel::setUndoStack( QUndoStack* undoStack ) void XQViewModel::setUndoStack( QUndoStack* undoStack )
{ {
@@ -501,7 +529,7 @@ void XQViewModel::setUndoStack( QUndoStack* undoStack )
} }
//! firz //! SLOT, der die erstellung & anzeige es context-menues triggert.
void XQViewModel::onShowContextMenu(const QPoint& point) void XQViewModel::onShowContextMenu(const QPoint& point)
{ {
@@ -510,7 +538,8 @@ void XQViewModel::onShowContextMenu(const QPoint& point)
} }
//! firz //! gibt die namen der neuen data-roles zurück.
//! __fix: die alten roles fehlen hier!
QHash<int, QByteArray> XQViewModel::roleNames() const QHash<int, QByteArray> XQViewModel::roleNames() const
{ {

View File

@@ -18,6 +18,7 @@
#include <QUndoStack> #include <QUndoStack>
#include <QMenu> #include <QMenu>
#include <QStandardItemModel> #include <QStandardItemModel>
#include <QAbstractItemView>
#include <xqsimpleclipboard.h> #include <xqsimpleclipboard.h>
#include <xqmodelsectionlist.h> #include <xqmodelsectionlist.h>
@@ -30,18 +31,7 @@ class XQItem;
class XQCommand; class XQCommand;
/** //! ein erweitertes QStandardItemModel welches 'seine' view bereits enthält.
* @brief Abstract baseclass of all modelviews: Extends QStandardItemModel with a treeview.
*/
// might be own implementation of QAbstractItemModel, not done yet.
// using QStandardItemModel = XQSimpleItemModel;
using QStandardItemModel = QStandardItemModel;
/**
* @brief The XQViewModel class: An extendend QStandardItem model
* containing its own view.
*/
class XQViewModel : public QStandardItemModel class XQViewModel : public QStandardItemModel
{ {
@@ -50,7 +40,7 @@ class XQViewModel : public QStandardItemModel
public: public:
XQViewModel(QObject* parent = nullptr); XQViewModel(QObject* parent = nullptr);
virtual ~XQViewModel(); virtual ~XQViewModel() = default;
XQTreeTable* treeTable(); XQTreeTable* treeTable();
virtual void setTreeTable( XQTreeTable* mainView ); virtual void setTreeTable( XQTreeTable* mainView );
@@ -58,10 +48,8 @@ public:
QUndoStack* undoStack(); QUndoStack* undoStack();
void setUndoStack( QUndoStack* undoStack ); void setUndoStack( QUndoStack* undoStack );
QHash<int, QByteArray> roleNames() const override;
//! create the own model structure //! create the own model structure
virtual void initModel( const QString& modelName) = 0; virtual void initModel( const QString& modelName);
//little helpers //little helpers
const XQItem& xqRootItem(); const XQItem& xqRootItem();
@@ -81,6 +69,8 @@ public:
virtual void cmdNew( XQCommand& command ); virtual void cmdNew( XQCommand& command );
virtual void cmdNewUndo( XQCommand& command ); virtual void cmdNewUndo( XQCommand& command );
QHash<int, QByteArray> roleNames() const override;
/*! /*!
Derzeit wir die default-implementierung von data/setData genutzt. hier wäre dann die Derzeit wir die default-implementierung von data/setData genutzt. hier wäre dann die
@@ -131,6 +121,7 @@ protected:
XQModelSectionList _sections; XQModelSectionList _sections;
XQTreeTable* _treeTable{}; XQTreeTable* _treeTable{};
//QAbstractItemView* _treeTable{};
QUndoStack* _undoStack{}; QUndoStack* _undoStack{};
XQContextMenu* _contextMenu{}; XQContextMenu* _contextMenu{};

View File

@@ -15,7 +15,7 @@
#include <znode.h> #include <znode.h>
//! firz //! überwachungszähler
namespace znode namespace znode
{ {

View File

@@ -14,7 +14,7 @@
#include <xqexception.h> #include <xqexception.h>
//! firz //! erzeugt einen std::runtime_error mit text und optionalem parameter
XQException::XQException(const QString& what, const QString& param ) XQException::XQException(const QString& what, const QString& param )
: std::runtime_error( param.isEmpty() ? what.toStdString() : QString( "%1: %2" ).arg(what,param).toStdString( ) ) : std::runtime_error( param.isEmpty() ? what.toStdString() : QString( "%1: %2" ).arg(what,param).toStdString( ) )

View File

@@ -15,21 +15,7 @@
#include <xqcontextmenu.h> #include <xqcontextmenu.h>
//! firz //! konstruktor.
XQContextMenu::XQContextMenu(const QString& title, QWidget* parent )
: QMenu( title, parent )
{
/*
QAction* titleDummy = new QAction(title,this);
QWidget::addAction(titleDummy);
addSeparator();
titleDummy->setEnabled(false);
*/
}
//! firz
XQContextMenu::XQContextMenu(QWidget* parent) XQContextMenu::XQContextMenu(QWidget* parent)
: QMenu( parent ) : QMenu( parent )
@@ -37,7 +23,8 @@ XQContextMenu::XQContextMenu(QWidget* parent)
} }
//! firz //! erzeugt eine action mit text
//! aus einem command-type und fügt sie hinzu.
void XQContextMenu::addAction(const QString& text, XQCommand::CmdType commandType, bool enabled) void XQContextMenu::addAction(const QString& text, XQCommand::CmdType commandType, bool enabled)
{ {
@@ -49,7 +36,8 @@ void XQContextMenu::addAction(const QString& text, XQCommand::CmdType commandTyp
} }
//! firz //! erzeugt eine action mit text und icon aus
//! einem command-type und fügt sie hinzu.
void XQContextMenu::addAction(const QString& iconKey, const QString& name, XQCommand::CmdType commandType, bool enabled) void XQContextMenu::addAction(const QString& iconKey, const QString& name, XQCommand::CmdType commandType, bool enabled)
{ {
@@ -57,7 +45,8 @@ void XQContextMenu::addAction(const QString& iconKey, const QString& name, XQCom
} }
//! firz //! erzeugt eine action mit text und icon aus
//! einem command-type und fügt sie hinzu.
void XQContextMenu::addAction(const QIcon& icon, const QString& text, XQCommand::CmdType commandType, bool enabled) void XQContextMenu::addAction(const QIcon& icon, const QString& text, XQCommand::CmdType commandType, bool enabled)
{ {
@@ -69,7 +58,7 @@ void XQContextMenu::addAction(const QIcon& icon, const QString& text, XQCommand:
} }
//! firz //! schaltet die action mit 'commandType'
void XQContextMenu::setActionEnabled(XQCommand::CmdType commandType, bool enabled) void XQContextMenu::setActionEnabled(XQCommand::CmdType commandType, bool enabled)
{ {

View File

@@ -29,7 +29,6 @@ class XQContextMenu : public QMenu
public: public:
XQContextMenu(const QString& title, QWidget* parent = nullptr );
XQContextMenu(QWidget* parent = nullptr ); XQContextMenu(QWidget* parent = nullptr );
virtual ~XQContextMenu() = default; virtual ~XQContextMenu() = default;

View File

@@ -20,7 +20,7 @@
#define DB_TIMESTAMP QTime::currentTime().toString(" -- HH:mm:ss.zzz") #define DB_TIMESTAMP QTime::currentTime().toString(" -- HH:mm:ss.zzz")
//! firz //! standardkonstruktor
XQTreeTable::XQTreeTable(QWidget* parent) XQTreeTable::XQTreeTable(QWidget* parent)
: QTreeView(parent) : QTreeView(parent)
@@ -36,15 +36,15 @@ XQTreeTable::XQTreeTable(QWidget* parent)
} }
//! firz //! gibt die verbundene modelview zurück, cast auf 'model()'
XQViewModel* XQTreeTable::modelView() XQViewModel* XQTreeTable::modelView()
{ {
return static_cast<XQViewModel*>(model()); return static_cast<XQViewModel*>(model());
} }
// __fixme: necessary?
//! firz //! shortcut: gibt das item für index zurück
XQItem& XQTreeTable::xqItemFromIndex(const QModelIndex& index ) XQItem& XQTreeTable::xqItemFromIndex(const QModelIndex& index )
{ {
@@ -52,7 +52,7 @@ XQItem& XQTreeTable::xqItemFromIndex(const QModelIndex& index )
} }
//! firz //! override von 'currentChanged' (noch nicht implementiert)
void XQTreeTable::currentChanged(const QModelIndex& current, const QModelIndex& previous) void XQTreeTable::currentChanged(const QModelIndex& current, const QModelIndex& previous)
{ {
@@ -137,25 +137,7 @@ void XQTreeTable::mouseMoveEvent(QMouseEvent* event)
} }
//! firz //! speichert die start-position fürs header-resizing.
void XQTreeTable::mouseDoubleClickEvent(QMouseEvent* event)
{
/*
QModelIndex idxFromPos = indexAt(event->pos());
if (idxFromPos.isValid())
{
if ( NTItem::isHeaderType(idxFromPos) && cursor().shape() == Qt::SplitHCursor)
{
return resizeColumnToContents(idxFromPos.column());
}
}
*/
QTreeView::mouseDoubleClickEvent(event);
}
//! firz
void XQTreeTable::mousePressEvent(QMouseEvent* event) void XQTreeTable::mousePressEvent(QMouseEvent* event)
{ {
@@ -174,18 +156,18 @@ void XQTreeTable::mousePressEvent(QMouseEvent* event)
} }
//! firz //! speichert die index-position fürs header-resizing.
void XQTreeTable::mouseReleaseEvent(QMouseEvent* event) void XQTreeTable::mouseReleaseEvent(QMouseEvent* event)
{ {
// reset index for resize column // reset index for resize column
_indexToResize = QModelIndex(); _indexToResize = QModelIndex();
setCursor(QCursor(Qt::ArrowCursor)); setCursor(QCursor(Qt::ArrowCursor));
QTreeView::mouseReleaseEvent(event); QTreeView::mouseReleaseEvent(event);
} }
//! firz //! zoom-in / zoom-out mit mausrad & ctrl
void XQTreeTable::wheelEvent(QWheelEvent* event) void XQTreeTable::wheelEvent(QWheelEvent* event)
{ {

View File

@@ -46,7 +46,6 @@ protected:
void currentChanged(const QModelIndex& current, const QModelIndex& previous) override; void currentChanged(const QModelIndex& current, const QModelIndex& previous) override;
void mouseMoveEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override;
void mouseDoubleClickEvent(QMouseEvent* event) override;
void mouseReleaseEvent(QMouseEvent* event) override; void mouseReleaseEvent(QMouseEvent* event) override;
void mousePressEvent(QMouseEvent* event) override; void mousePressEvent(QMouseEvent* event) override;
void mouseResizeHeaderEntry(int xpos); void mouseResizeHeaderEntry(int xpos);

View File

@@ -7,7 +7,7 @@
--> -->
<ItemTypes> <ItemTypes>
<TreeParentType RenderStyle="PlainStyle" ItemFlags="IsEnabled|IsDropEnabled" Icon="folder-new" /> <TreeParentType RenderStyle="PlainStyle" ItemFlags="IsEnabled|IsDropEnabled" Icon="DirIcon" />
<TreeChildType RenderStyle="PlainStyle" ItemFlags="IsEnabled|IsDragEnabled|IsSelectable|IsDropEnabled"/> <TreeChildType RenderStyle="PlainStyle" ItemFlags="IsEnabled|IsDragEnabled|IsSelectable|IsDropEnabled"/>
<HeaderType RenderStyle="HeaderStyle" ItemFlags="IsEnabled" Icon="battery"/> <HeaderType RenderStyle="HeaderStyle" ItemFlags="IsEnabled" Icon="battery"/>
<HiddenType RenderStyle="HiddenStyle"/> <HiddenType RenderStyle="HiddenStyle"/>
@@ -23,10 +23,10 @@
DocumentTreeModel DocumentTreeModel
--> -->
<!--
<DocumentTreeModel> <DocumentTreeModel>
<ActiveProjects ItemType="PlainType" HeaderItemType="TreeParentType" HeaderCaption="Active Projects" State="runnning"> <ActiveProjects ItemType="PlainType" HeaderItemType="TreeParentType" HeaderCaption="Active Projects" State="runnning">
<Project ItemType="farz" HeaderItemType="TreeChildType" Icon="list-add"/> <Project ItemType="TreeChildType" Icon="list-add"/>
</ActiveProjects> </ActiveProjects>
<PlannedProjects HeaderItemType="TreeParentType" HeaderCaption="Planned Projects" State="planned"> <PlannedProjects HeaderItemType="TreeParentType" HeaderCaption="Planned Projects" State="planned">
<Project ItemType="TreeChildType" Icon="list-add"/> <Project ItemType="TreeChildType" Icon="list-add"/>
@@ -35,18 +35,41 @@
<Project ItemType="TreeChildType" Icon="list-remove"/> <Project ItemType="TreeChildType" Icon="list-remove"/>
</FinishedProjects> </FinishedProjects>
</DocumentTreeModel> </DocumentTreeModel>
<!--
<DocumentTreeModelX>
<ActiveProjects ItemType="TreeParentType" HeaderCaption="Active Projects" ItemType="ValueType" State="runnning"/>
<PlannedProjects HeaderItemType="TreeParentType" HeaderCaption="Planned Projects" ItemType="ValueType" State="planned"/>
<FinishedProjects HeaderItemType="TreeParentType" HeaderCaption="Finished Projects" ItemType="ValueType" State="finished"/>
</DocumenTreeModelX>
--> -->
<!-- <!--
DocumentDetailsModel: DocumentDetailsModel:
--> -->
<DocumentTreeModel>
<Section State="runnning">
<Header>
<Entry Caption="Active Projects" ItemType="TreeParentType"/>
</Header>
<Data>
<Project Caption="@ProjectName" ItemType="TreeParentType"/>
</Data>
</Section>
<Section State="planned">
<Header>
<Entry Caption="Planned Projects" ItemType="TreeParentType"/>
</Header>
<Data>
<Project Caption="@ProjectName" ItemType="TreeParentType"/>
</Data>
</Section>
<Section State="finished">
<Header>
<Entry Caption="Finished Projects" ItemType="TreeParentType"/>
</Header>
<Data>
<Project Caption="@ProjectName" ItemType="TreeParentType"/>
</Data>
</Section>
</DocumentTreeModel>
<DocumentDetailsModel> <DocumentDetailsModel>