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

List:       kde-commits
Subject:    KDE/kdeedu/kig
From:       Pino Toscano <toscano.pino () tiscali ! it>
Date:       2007-03-31 22:52:27
Message-ID: 1175381547.486448.28958.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 648659 by pino:

port the TextLabelWizard to the new QWizard, hopefully should work as before


 M  +0 -4      CMakeLists.txt  
 M  +36 -42    modes/label.cc  
 M  +2 -2      modes/label.h  
 M  +2 -0      modes/linkslabel.cpp  
 M  +5 -0      modes/linkslabel.h  
 M  +139 -24   modes/textlabelwizard.cc  
 M  +16 -5     modes/textlabelwizard.h  
 D             modes/textlabelwizardbase.ui  


--- trunk/KDE/kdeedu/kig/CMakeLists.txt #648658:648659
@@ -119,10 +119,6 @@
    kig/kig_view.cpp
 )
 
-kde4_add_ui3_files(kigpart_PART_SRCS
-   modes/textlabelwizardbase.ui
-)
-
 kde4_add_ui_files(kigpart_PART_SRCS
    modes/typeswidget.ui
    modes/edittypewidget.ui
--- trunk/KDE/kdeedu/kig/modes/label.cc #648658:648659
@@ -211,7 +211,6 @@
     argcalcer->calc( mdoc.document() );
 
     updateLinksLabel();
-    updateWiz();
     break;
   }
   default:
@@ -300,7 +299,8 @@
   cancelConstruction();
 }
 
-static uint percentCount( const QString& s )
+// also used in textlabelwizard.cc
+uint percentCount( const QString& s )
 {
 //  QRegExp re( QString::fromUtf8( "%[0-9]" ) );
   QRegExp re( QString::fromUtf8( "%[\\d]+" ) );
@@ -314,13 +314,13 @@
   return percentcount;
 }
 
-void TextLabelModeBase::finishPressed()
+bool TextLabelModeBase::canFinish()
 {
-  bool needframe = d->wiz->needFrameCheckBox->isChecked();
-  QString s = d->wiz->labelTextInput->text();
+  bool finish = true;
+  QString s = d->wiz->text();
 
   assert( percentCount( s ) == d->args.size() );
-  if ( d->wiz->currentPage() == d->wiz->enter_text_page )
+  if ( d->wiz->currentId() == TextLabelWizard::TextPageId )
     assert( d->args.size() == 0 );
 
   bool finished = true;
@@ -328,20 +328,31 @@
     finished &= ( *i != 0 );
 
   if ( ! finished )
+  {
     KMessageBox::sorry( mdoc.widget(),
                         i18n( "There are '%n' parts in the text that you have not selected a "
                               "value for. Please remove them or select enough arguments." ) );
-  else
-  {
-    finish( d->mcoord, s, d->args, needframe, d->locationparent );
-    killMode();
+    finished = false;
   };
+
+  return finish;
 }
 
-void TextLabelModeBase::updateWiz()
+void TextLabelModeBase::finishPressed()
 {
-  QString s = d->wiz->labelTextInput->text();
-  uint percentcount = percentCount( s );
+  if ( !canFinish() )
+    return;
+
+  bool needframe = d->wiz->field( "wantframe" ).toBool();
+  QString s = d->wiz->text();
+
+  finish( d->mcoord, s, d->args, needframe, d->locationparent );
+  killMode();
+}
+
+bool TextLabelModeBase::percentCountChanged( uint percentcount )
+{
+  bool finish = true;
   if ( d->lpc > percentcount )
   {
     d->args = argvect( d->args.begin(), d->args.begin() + percentcount );
@@ -351,37 +362,24 @@
     d->args.resize( percentcount, 0 );
   };
 
-  if ( percentcount == 0 && ! s.isEmpty() )
+  if ( percentcount != 0 )
   {
-    d->wiz->setNextEnabled( d->wiz->enter_text_page, false );
-    d->wiz->setFinishEnabled( d->wiz->enter_text_page, true );
-    d->wiz->setAppropriate( d->wiz->select_arguments_page, false );
-  }
-  else
-  {
-    d->wiz->setAppropriate( d->wiz->select_arguments_page, !s.isEmpty() );
-    d->wiz->setNextEnabled( d->wiz->enter_text_page, ! s.isEmpty() );
-    d->wiz->setFinishEnabled( d->wiz->enter_text_page, false );
     bool finished = true;
     for ( argvect::iterator i = d->args.begin(); i != d->args.end(); ++i )
       finished &= ( *i != 0 );
-    assert( percentCount( s ) == d->args.size() );
-
-    d->wiz->setFinishEnabled( d->wiz->select_arguments_page, finished );
+    assert( percentcount == d->args.size() );
+    finish = finished;
   };
 
   d->lpc = percentcount;
-}
 
-void TextLabelModeBase::labelTextChanged()
-{
-  updateWiz();
+  return finish;
 }
 
 void TextLabelModeBase::updateLinksLabel()
 {
-  LinksLabel::LinksLabelEditBuf buf = d->wiz->myCustomWidget1->startEdit();
-  QString s = d->wiz->labelTextInput->text();
+  LinksLabel::LinksLabelEditBuf buf = d->wiz->linksLabel()->startEdit();
+  QString s = d->wiz->text();
 //  QRegExp re( "%[0-9]" );
   QRegExp re( "%[\\d]+" );
   int prevpos = 0;
@@ -400,7 +398,7 @@
       // fetch the text part...
       QString subs = s.mid( prevpos, pos - prevpos );
       // and add it...
-      d->wiz->myCustomWidget1->addText( subs, buf );
+      d->wiz->linksLabel()->addText( subs, buf );
     };
     // we always need a link part...
     QString linktext( "%1" );
@@ -415,7 +413,7 @@
       // otherwise, we show a stub...
       linktext = i18n( "argument %1", count + 1 );
 
-    d->wiz->myCustomWidget1->addLink( linktext, buf );
+    d->wiz->linksLabel()->addLink( linktext, buf );
     // set pos and prevpos to the next char after the last match, so
     // we don't enter infinite loops...
 //    pos += 2;
@@ -425,10 +423,9 @@
   };
 
   if ( prevpos != s.length() )
-    d->wiz->myCustomWidget1->addText( s.mid( prevpos ), buf );
+    d->wiz->linksLabel()->addText( s.mid( prevpos ), buf );
 
-  d->wiz->myCustomWidget1->applyEdit( buf );
-  d->wiz->relayoutArgsPage();
+  d->wiz->linksLabel()->applyEdit( buf );
 
   d->wiz->resize( d->wiz->size() );
 }
@@ -458,16 +455,13 @@
   if ( d->mwawd == SelectingLocation )
   {
     d->mwawd = RequestingText;
-    updateWiz();
     d->wiz->show();
-    // shouldn't be necessary, but seems to be anyway.. :(
-    updateWiz();
   };
 }
 
 void TextLabelModeBase::setText( const QString& s )
 {
-  d->wiz->labelTextInput->setText( s );
+  d->wiz->setText( s );
 }
 
 void TextLabelModeBase::setPropertyObjects( const argvect& props )
@@ -628,7 +622,7 @@
 
 void TextLabelModeBase::setFrame( bool f )
 {
-  d->wiz->needFrameCheckBox->setChecked( f );
+  d->wiz->setField( "wantframe", f );
 }
 
 void TextLabelModeBase::setLocationParent( ObjectCalcer* o )
--- trunk/KDE/kdeedu/kig/modes/label.h #648658:648659
@@ -52,9 +52,10 @@
   void finishPressed();
   void enterTextPageEntered();
   void selectArgumentsPageEntered();
-  void labelTextChanged();
   void linkClicked( int );
   void redrawScreen( KigWidget* w );
+  bool percentCountChanged( uint percentcount );
+  bool canFinish();
 
 protected:
   typedef std::vector<ObjectCalcer::shared_ptr> argvect;
@@ -101,7 +102,6 @@
    */
   typedef enum { SelectingLocation, RequestingText, SelectingArgs, ReallySelectingArgs } wawdtype;
 
-  void updateWiz();
   void updateLinksLabel();
 };
 
--- trunk/KDE/kdeedu/kig/modes/linkslabel.cpp #648658:648659
@@ -131,4 +131,6 @@
 
   std::for_each( p->urllabels.begin(), p->urllabels.end(), mem_fun( &QWidget::show ) );
   std::for_each( p->labels.begin(), p->labels.end(), mem_fun( &QWidget::show ) );
+
+  emit changed();
 }
--- trunk/KDE/kdeedu/kig/modes/linkslabel.h #648658:648659
@@ -74,6 +74,11 @@
    */
   void linkClicked( int i );
 
+  /**
+   * the structure of links and texts was changed
+   */
+  void changed();
+
 private slots:
   void urlClicked();
 
--- trunk/KDE/kdeedu/kig/modes/textlabelwizard.cc #648658:648659
@@ -21,60 +21,162 @@
 #include "label.h"
 #include "linkslabel.h"
 
+#include <qcheckbox.h>
+#include <qlabel.h>
 #include <qlayout.h>
 #include <qtextedit.h>
 
+#include <kdialog.h>
 #include <ktoolinvocation.h>
+#include <kdebug.h>
 
+// defined in label.cc
+extern uint percentCount( const QString& s );
+
+class TextPage : public QWizardPage
+{
+public:
+  TextPage( QWidget* parent, TextLabelModeBase* mode );
+
+  QTextEdit* mtext;
+
+private:
+  TextLabelModeBase* mmode;
+};
+
+TextPage::TextPage( QWidget* parent, TextLabelModeBase* mode )
+  : QWizardPage( parent ), mmode( mode )
+{
+  setTitle( i18n( "Enter Label Text" ) );
+  setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
+  setFinalPage( true );
+
+  QVBoxLayout* lay = new QVBoxLayout( this );
+  lay->setMargin( 0 );
+  QLabel* label = new QLabel( this );
+  lay->addWidget( label );
+  label->setText(
+      i18n( "Enter the text for your label here and press \"Next\".\n"
+            "If you want to show variable parts, then put %1, %2, ... "
+            "at the appropriate places (e.g. \"This segment is %1 units "
+            "long.\").", QString( "%1" ), QString( "%2" ) ) ); // grrr i18n()
+  label->setAlignment( Qt::AlignTop );
+  label->setWordWrap( true );
+  mtext = new QTextEdit( this );
+  lay->addWidget( mtext );
+  QCheckBox* wantframe = new QCheckBox( this );
+  lay->addWidget( wantframe );
+  wantframe->setText( i18n( "Show text in a frame" ) );
+
+  registerField( "wantframe", wantframe );
+
+  connect( mtext, SIGNAL( textChanged() ), parent, SLOT( textChanged() ) );
+}
+
+
+class ArgsPage : public QWizardPage
+{
+public:
+  ArgsPage( QWidget* parent, TextLabelModeBase* mode );
+
+  virtual bool validatePage();
+
+  LinksLabel* mlinks;
+
+private:
+  TextLabelModeBase* mmode;
+};
+
+ArgsPage::ArgsPage( QWidget* parent, TextLabelModeBase* mode )
+  : QWizardPage( parent ), mmode( mode )
+{
+  setTitle( i18n( "Select Arguments" ) );
+  setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
+  setFinalPage( true );
+
+  QVBoxLayout* lay = new QVBoxLayout( this );
+  lay->setMargin( 0 );
+  QLabel* label = new QLabel( this );
+  lay->addWidget( label );
+  label->setText(
+      i18n( "Now select the argument(s) you need.  For every argument, "
+            "click on it, select an object and a property in the Kig "
+            "window, and click finish when you are done..." ) );
+  label->setWordWrap( true );
+  mlinks = new LinksLabel( this );
+  lay->addWidget( mlinks );
+
+  connect( mlinks, SIGNAL( changed() ), this, SIGNAL( completeChanged() ) );
+}
+
+bool ArgsPage::validatePage()
+{
+  return mmode->canFinish();
+}
+
+
 TextLabelWizard::TextLabelWizard( QWidget* parent, TextLabelModeBase* mode )
-  : TextLabelWizardBase( parent, "TextLabelWizard" ), mmode( mode )
+  : QWizard( parent ), mmode( mode )
 {
   setModal( false );
-  connect( labelTextInput, SIGNAL( textChanged() ),
-           SLOT( textChanged() ) );
-  connect( myCustomWidget1, SIGNAL( linkClicked( int ) ),
+  setObjectName( QLatin1String( "TextLabelWizard" ) );
+  setWindowTitle( KDialog::makeStandardCaption( i18n( "Construct Label" ) ) );
+  setOption( HaveHelpButton );
+  setOption( HaveFinishButtonOnEarlyPages );
+
+  mtextPage = new TextPage( this, mmode );
+  setPage( TextPageId, mtextPage );
+  margsPage = new ArgsPage( this, mmode );
+  setPage( ArgsPageId, margsPage );
+
+  connect( this, SIGNAL( helpRequested() ), this,
+           SLOT( slotHelpClicked() ) );
+  connect( linksLabel(), SIGNAL( linkClicked( int ) ),
            SLOT( linkClicked( int ) ) );
-  connect( this, SIGNAL( helpClicked() ),
-           this, SLOT( slotHelpClicked() ) );
-  labelTextInput->setFocus();
+  connect( this, SIGNAL( currentIdChanged( int ) ),
+           this, SLOT( currentIdChanged( int ) ) );
+
+  mtextPage->mtext->setFocus();
 }
 
 TextLabelWizard::~TextLabelWizard()
 {
 }
 
-void TextLabelWizard::back()
+LinksLabel* TextLabelWizard::linksLabel()
 {
-  if ( currentPage() == select_arguments_page )
-  {
-    mmode->enterTextPageEntered();
-  }
-  TextLabelWizardBase::back();
+  return margsPage->mlinks;
 }
 
-void TextLabelWizard::next()
+QString TextLabelWizard::text() const
 {
-  if ( currentPage() == enter_text_page )
-  {
-    mmode->selectArgumentsPageEntered();
-  }
-  TextLabelWizardBase::next();
+  return mtextPage->mtext->toPlainText();
 }
 
+void TextLabelWizard::setText( const QString& newtext )
+{
+  mtextPage->mtext->setPlainText( newtext );
+}
+
 void TextLabelWizard::reject()
 {
-  TextLabelWizardBase::reject();
+  QWizard::reject();
   mmode->cancelPressed();
 }
 
 void TextLabelWizard::accept()
 {
+  QWizard::accept();
   mmode->finishPressed();
 }
 
 void TextLabelWizard::textChanged()
 {
-  mmode->labelTextChanged();
+  uint percentcount = percentCount( text() );
+  bool finish = mmode->percentCountChanged( percentcount );
+  (void)finish;
+  button( QWizard::FinishButton )->setEnabled( percentcount == 0 );
+  button( QWizard::NextButton )->setEnabled( percentcount > 0 );
 }
 
 void TextLabelWizard::linkClicked( int which )
@@ -82,10 +184,23 @@
   mmode->linkClicked( which );
 }
 
-void TextLabelWizard::relayoutArgsPage()
+void TextLabelWizard::currentIdChanged( int id )
 {
-  vboxLayout1->activate();
-  repaint();
+  switch ( id )
+  {
+    case TextPageId:
+      mmode->enterTextPageEntered();
+      // simulate a text change
+      textChanged();
+      break;
+    case ArgsPageId:
+      mmode->selectArgumentsPageEntered();
+      break;
+    case -1: // no id - skip it
+      break;
+    default:
+      ;
+  }
 }
 
 void TextLabelWizard::slotHelpClicked()
--- trunk/KDE/kdeedu/kig/modes/textlabelwizard.h #648658:648659
@@ -18,29 +18,40 @@
 #ifndef KIG_MODES_TEXTLABELWIZARD_H
 #define KIG_MODES_TEXTLABELWIZARD_H
 
-#include "textlabelwizardbase.h"
+#include <qwizard.h>
 
+class ArgsPage;
+class LinksLabel;
 class TextLabelModeBase;
+class TextPage;
 
-class TextLabelWizard : public TextLabelWizardBase
+class TextLabelWizard : public QWizard
 {
   Q_OBJECT
 public:
   TextLabelWizard( QWidget* parent, TextLabelModeBase* mode );
   ~TextLabelWizard();
 
-  void back();
-  void next();
+  static const int TextPageId = 0;
+  static const int ArgsPageId = 1;
+
+  LinksLabel* linksLabel();
+  QString text() const;
+  void setText( const QString& newtext );
+
+public slots:
   void reject();
   void accept();
 
-  void relayoutArgsPage();
 private slots:
   void textChanged();
   void linkClicked( int which );
+  void currentIdChanged( int id );
   void slotHelpClicked();
 private:
   TextLabelModeBase* mmode;
+  TextPage* mtextPage;
+  ArgsPage* margsPage;
 };
 
 #endif // TEXTLABELWIZARD_H
[prev in list] [next in list] [prev in thread] [next in thread] 

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