/***************************************************************************

    source::worx xtree
    Copyright © 2024-2025 c.holzheuer
    christoph.holzheuer@gmail.com

    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.

***************************************************************************/


#include <QPersistentModelIndex>
#include <QClipboard>

#include <xqmainmodel.h>

#include <xqexception.h>
#include <xqtreetable.h>
#include <xqitemdelegate.h>
#include <xqitem.h>
#include <xqappdata.h>
#include <xqselectionmodel.h>
#include <xqitemfactory.h>


//! default konstruktor.

XQMainModel::XQMainModel(QObject *parent )
    : XQViewModel{parent}
{

}

//! leere default implementation

void XQMainModel::initContextMenu()
{
}


//! erzeugt einen eintrag in der baum-übersicht.

XQItem* XQMainModel::addProjectItem( XQNodePtr contentNode )
{
  // wir durchsuchen alle unsere sections nach dem passenden content-type,
  // hier: content-type beschreibt den projekt-status

  const QString& sectionKey = contentNode->attribute(c_ContentType);
  if( _sections.hasValidSection( sectionKey ) )
  {
    const XQModelSection& section = _sections.sectionByKey( sectionKey );
    // __fixme! das ist mist!
    const XQNodePtr sheetNode = section.sheetRootNode()->first_child();
    XQItem* newItem = _itemFactory.makeSingleItem( sheetNode, contentNode->attribute( "ProjectName") );

    // den neuen eintrag in die passende section der übersicht eintragen ...
    section.headerItem().appendRow( newItem );
    // erzeuger sheet node speichern
    newItem->setSheetNode( sheetNode );
    expandNewItem(section.headerItem().index() );
    return newItem;
  }
  throw XQException( "addProjectItem: main model should not be empty!" );
}


//! erzeugt einen einzelen baum-eintrag mit hilfe der section und den projekt-daten

void XQMainModel::addSectionItem( const XQModelSection& section, XQItem* projectItem )
{
  XQNodePtr sheetNode = projectItem->sheetNode()->child("CurrentSection");
  XQItem* newItem = _itemFactory.makeSingleItem( sheetNode,  section.contentType() );
  projectItem->appendRow( newItem );
  expandNewItem(projectItem->index() );
}


