[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdepim/kode/kxforms
From:       Andre Duffeck <andre () duffeck ! de>
Date:       2007-03-13 10:48:09
Message-ID: 1173782889.303880.4209.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 642091 by duffeck:

Fix lists of complexTypes.


 M  +12 -0     formcreator.cpp  
 M  +24 -2     guielement.cpp  
 M  +6 -1      guielement.h  
 M  +4 -1      input.cpp  
 M  +0 -4      input.h  
 M  +1 -1      list.cpp  
 M  +0 -3      list.h  
 M  +1 -1      section.cpp  
 M  +0 -4      section.h  
 M  +18 -7     select1.cpp  
 M  +0 -4      select1.h  
 M  +2 -3      textarea.cpp  
 M  +0 -2      textarea.h  


--- trunk/KDE/kdepim/kode/kxforms/formcreator.cpp #642090:642091
@@ -134,6 +134,7 @@
       !element.mixed() && 
       !choiceOnly) {
     section = xml->tag( "kxf:section" );
+    section->attribute( "ref", path.toString() );
     path = path + Reference( element.name() );
     createLabel( section, element );
     if(  element.elementRelations().size() <= 1 ) {
@@ -184,6 +185,17 @@
         }
       }
 
+      if ( itemLabel.isEmpty() && itemElement.elementRelations().count() > 0 ) {
+        Schema::Element e2 = mDocument.element( itemElement.elementRelations().first() );
+        QString ref;
+        ref += QString("/%1").arg( e2.name() );
+        while( e2.elementRelations().count() > 0 ) {
+          ref += QString("/%1").arg( e2.elementRelations().first().target() );
+          e2 = mDocument.element( e2.elementRelations().first().target() );
+        }
+        itemLabel += QString("<arg ref=\"%1\"/>").arg( ref );
+      }
+
       if ( itemLabel.isEmpty() ) {
         if ( itemElement.type() == Schema::Node::String ) {
           itemLabel += "<arg ref=\".\" truncate=\"40\"/>";
--- trunk/KDE/kdepim/kode/kxforms/guielement.cpp #642090:642091
@@ -20,11 +20,12 @@
 */
 
 #include "guielement.h"
+#include "manager.h"
 
 using namespace KXForms;
 
-GuiElement::GuiElement( QWidget *parent )
-  : mParent( parent ), mLabel( 0 ), mWidget( 0 )
+GuiElement::GuiElement( QWidget *parent, Manager *manager )
+  : mParent( parent ), mLabel( 0 ), mWidget( 0 ), mManager( manager )
 {
 }
 
@@ -47,6 +48,27 @@
   return mContext;
 }
 
+QDomElement GuiElement::createElement( const Reference &ref )
+{
+  QDomElement e;
+  QDomElement itElement = context();
+  foreach( Reference::Segment s, ref.segments() ) {
+    if( s.isEmpty() )
+      continue;
+    e = itElement.firstChildElement( s.name() );
+    int cnt = 1;
+    while( !e.isNull() && cnt++ < s.count() ) {
+      e = e.nextSiblingElement( s.name() );
+    }
+    if( e.isNull() ) {
+      e = mManager->document().createElement( s.name() );
+      itElement.appendChild( e );
+    }
+    itElement = e;
+  }
+  return e;
+}
+
 void GuiElement::loadData( const QDomElement &element )
 {
   mContext = element;
--- trunk/KDE/kdepim/kode/kxforms/guielement.h #642090:642091
@@ -29,12 +29,14 @@
 
 namespace KXForms {
 
+class Manager;
+
 class GuiElement : public QObject
 {
   public:
     typedef QList<GuiElement *> List;
 
-    GuiElement( QWidget *parent );
+    GuiElement( QWidget *parent, Manager *m );
     virtual ~GuiElement();
 
     virtual void parseElement( const QDomElement & ) {}
@@ -44,6 +46,8 @@
 
     QDomElement context() const;
 
+    QDomElement createElement( const Reference & );
+
     void loadData( const QDomElement &context );
 
     virtual QWidget *widget() { return mWidget; }
@@ -56,6 +60,7 @@
     QWidget *mParent;
     QLabel *mLabel;
     QWidget *mWidget;
+    Manager *mManager;
 
   private:
     Reference mRef;
--- trunk/KDE/kdepim/kode/kxforms/input.cpp #642090:642091
@@ -32,7 +32,7 @@
 using namespace KXForms;
 
 Input::Input( Manager *m, const QString &label, QWidget *parent )
-  : GuiElement( parent ), mManager( m )
+  : GuiElement( parent, m )
 {
   mLabel = new QLabel( label, mParent );
   mLineEdit = new KLineEdit( mParent );
@@ -62,6 +62,9 @@
     ref().applyAttributeContext( context() ).setAttribute( s.name(), txt );
   } else {
     QDomElement e = ref().applyElement( context() );
+    if ( e.isNull() ) {
+      e = createElement( ref() );
+    }
     QDomText t = e.firstChild().toText();
     if ( t.isNull() ) {
       t = mManager->document().createTextNode( txt );
--- trunk/KDE/kdepim/kode/kxforms/input.h #642090:642091
@@ -27,8 +27,6 @@
 
 namespace KXForms {
 
-class Manager;
-
 class Input : public GuiElement
 {
     Q_OBJECT
@@ -42,8 +40,6 @@
     void returnPressed();
 
   private:
-    Manager *mManager;
-
     KLineEdit *mLineEdit;
 };
 
--- trunk/KDE/kdepim/kode/kxforms/list.cpp #642090:642091
@@ -40,7 +40,7 @@
 using namespace KXForms;
 
 List::List( Manager *m, const QString &label, QWidget *parent )
-  : GuiElement( parent ), mManager( m )
+  : GuiElement( parent, m )
 {
   kDebug() << "List() " << label << endl;
   mWidget = new QWidget( mParent );
--- trunk/KDE/kdepim/kode/kxforms/list.h #642090:642091
@@ -27,7 +27,6 @@
 
 namespace KXForms {
 
-class Manager;
 class ListModel;
 
 class List : public GuiElement
@@ -79,8 +78,6 @@
     void resizeColumns();
 
   private:
-    Manager *mManager;
-
     ItemClass::List mItemClasses;
 
     QTreeView *mView;
--- trunk/KDE/kdepim/kode/kxforms/section.cpp #642090:642091
@@ -30,7 +30,7 @@
 using namespace KXForms;
 
 Section::Section( Manager *m, const QString &label, QWidget *parent )
-  : GuiElement( parent ), mManager( m )
+  : GuiElement( parent, m )
 {
   mLabel = new QLabel( label );
   mBox = new QGroupBox( mParent );
--- trunk/KDE/kdepim/kode/kxforms/section.h #642090:642091
@@ -28,8 +28,6 @@
 
 namespace KXForms {
 
-class Manager;
-
 class Section : public GuiElement
 {
   public:
@@ -41,8 +39,6 @@
     QLayout *layout() { return mLayout; }
 
   private:
-    Manager *mManager;
-
     QGroupBox *mBox;
     QLayout *mLayout;
 };
--- trunk/KDE/kdepim/kode/kxforms/select1.cpp #642090:642091
@@ -20,6 +20,7 @@
 */
 
 #include "select1.h"
+#include "manager.h"
 
 #include <kdebug.h>
 
@@ -30,7 +31,7 @@
 using namespace KXForms;
 
 Select1::Select1( Manager *m, const QString &label, QWidget *parent )
-  : GuiElement( parent ), mManager( m )
+  : GuiElement( parent, m )
 {
   mLabel = new QLabel( label, parent );
   mComboBox = new QComboBox( parent );
@@ -86,7 +87,8 @@
 void Select1::saveData()
 {
   kDebug() << "Select1::saveData()" << endl;
-
+  kDebug() << ref().toString() << endl;
+  kDebug() << "Context: " << context().nodeName() << endl;
   Reference::Segment s = ref().segments().last();
 
   QString txt = mValues[ mComboBox->currentIndex() ];
@@ -94,12 +96,21 @@
     context().setAttribute( s.name(), txt );
   } else {
     QDomElement e = ref().applyElement( context() );
+    if ( e.isNull() ) {
+      e = createElement( ref() );
+    }
     QDomNode n = e.firstChild();
-    if( n.isText() ) {
-      QDomText t = n.toText();
-      t.setData( txt );
-    } else {
-      n.toElement().setTagName( txt );
+    if( n.isNull() ) {
+      n = mManager->document().createElement( txt );
+      e.appendChild( n );
     }
+    else {
+      if( n.isText() ) {
+        QDomText t = n.toText();
+        t.setData( txt );
+      } else if( n.isElement() ){
+        n.toElement().setTagName( txt );
+      }
+    }
   }
 }
--- trunk/KDE/kdepim/kode/kxforms/select1.h #642090:642091
@@ -29,8 +29,6 @@
 
 namespace KXForms {
 
-class Manager;
-
 class Select1 : public GuiElement
 {
   public:
@@ -42,8 +40,6 @@
     void parseElement( const QDomElement &formElement );
 
   private:
-    Manager *mManager;
-
     QComboBox *mComboBox;
     QStringList mValues;
 };
--- trunk/KDE/kdepim/kode/kxforms/textarea.cpp #642090:642091
@@ -33,7 +33,7 @@
 using namespace KXForms;
 
 TextArea::TextArea( Manager *m, const QString &label, QWidget *parent )
-  : GuiElement( parent ), mManager( m )
+  : GuiElement( parent, m )
 {
   mLabel = new QLabel( label, mParent );
   mEdit = new QTextEdit( mParent );
@@ -65,8 +65,7 @@
   QDomElement e = ref().applyElement( context() );
 
   if ( e.isNull() ) {
-    e = mManager->document().createElement( ref().lastSegment().name() );
-    context().appendChild( e );
+    e = createElement( ref() );
   }
 
   QString tag = e.tagName();
--- trunk/KDE/kdepim/kode/kxforms/textarea.h #642090:642091
@@ -27,8 +27,6 @@
 
 namespace KXForms {
 
-class Manager;
-
 class TextArea : public GuiElement
 {
   public:
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic