From 8c2422ba6d534bb8abcdb6b89857b23e3da0512d Mon Sep 17 00:00:00 2001 From: Noldor Date: Mon, 9 Aug 2010 07:37:41 +0000 Subject: Implementation feature #882 (work in progress) git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@4814 17fca916-40b9-46aa-a4ea-0a15b648b75c --- src/modules/classeditor/classeditor.cpp | 170 ++++++++++++++++++++++++-------- src/modules/classeditor/classeditor.h | 17 +++- 2 files changed, 141 insertions(+), 46 deletions(-) (limited to 'src/modules/classeditor') diff --git a/src/modules/classeditor/classeditor.cpp b/src/modules/classeditor/classeditor.cpp index a1f739d35..a4c21a54f 100644 --- a/src/modules/classeditor/classeditor.cpp +++ b/src/modules/classeditor/classeditor.cpp @@ -185,15 +185,16 @@ KviClassEditor::KviClassEditor(QWidget * par) hbox = new KviTalHBox(box); hbox->setSpacing(0); hbox->setMargin(0); - m_pMemberFunctionNameLabel = new QLabel(__tr2qs_ctx("No item selected","editor"),hbox); - m_pMemberFunctionNameRenameButton = new QPushButton(__tr2qs_ctx("Rename","editor"),hbox); - m_pMemberFunctionNameRenameButton->setEnabled(false); - connect(m_pMemberFunctionNameRenameButton,SIGNAL(clicked()),this,SLOT(renameFunction())); - hbox->setStretchFactor(m_pMemberFunctionNameLabel,2); - m_pMemberFunctionNameRenameButton->setToolTip(__tr2qs_ctx("Edit the function member name","editor")); - - - + m_pFunctionNameLabel = new QLabel(__tr2qs_ctx("No item selected","editor"),hbox); + m_pFunctionNameRenameButton = new QPushButton(__tr2qs_ctx("Rename","editor"),hbox); + m_pFunctionNameRenameButton->setEnabled(false); + connect(m_pFunctionNameRenameButton,SIGNAL(clicked()),this,SLOT(renameFunction())); + hbox->setStretchFactor(m_pFunctionNameLabel,2); + m_pFunctionNameRenameButton->setToolTip(__tr2qs_ctx("Edit the function member name","editor")); + + m_pReminderLabel = new QLabel(__tr2qs_ctx("No item selected","editor"),box); + m_pReminderLabel->hide(); + m_pReminderLabel->setWordWrap(1); m_pEditor = KviScriptEditor::createInstance(box); m_pEditor->setFocus(); @@ -404,7 +405,8 @@ void KviClassEditor::createFullClass(KviKvsObjectClass *pClass, KviClassEditorTr if(!pFunctionItem) pFunctionItem = new KviClassEditorTreeWidgetItem(pClassItem,KviClassEditorTreeWidgetItem::Method,it.currentKey()); pClass->getFunctionCode(szCode,*handler); pFunctionItem->setBuffer(szCode); - if(handler->flags() & KviKvsObjectFunctionHandler::Internal) pFunctionItem->setInternalFunction(true); + pFunctionItem->setReminder(pClass->reminder(handler)); + if(handler->flags() & KviKvsObjectFunctionHandler::Internal) pFunctionItem->setInternalFunction(true); } ++it; } @@ -453,14 +455,38 @@ void KviClassEditor::renameFunction() { if(!m_pLastEditedItem)return; KviClassEditorTreeWidgetItem *pFunction=m_pLastEditedItem; - QString szClassName = ((KviClassEditorTreeWidgetItem*)pFunction->parent())->name(); + QString szClassName = buildFullClassName((KviClassEditorTreeWidgetItem*)pFunction->parent()); QString szFunctionName = pFunction->name(); + QString szReminder = pFunction->reminder(); + QString szNewReminder=szReminder; KviClassEditorTreeWidgetItem *pParentClass = (KviClassEditorTreeWidgetItem*) pFunction->parent(); QString szNewFunctionName = szFunctionName; bool bInternal=pFunction->isInternalFunction(); - if(!askForFunction(szNewFunctionName, &bInternal,szClassName, true)) return; - if(KviQString::equalCI(szFunctionName,szNewFunctionName) && bInternal==pFunction->isInternalFunction()) return; + if(!askForFunction(szNewFunctionName,szNewReminder,&bInternal,szClassName, true)) return; + if(KviQString::equalCI(szFunctionName,szNewFunctionName) && bInternal==pFunction->isInternalFunction()) + { + if(!KviQString::equalCI(szNewReminder,szReminder)) + { + pFunction->setReminder(szNewReminder); + KviKvsObjectClass *pClass = KviKvsKernel::instance()->objectController()->lookupClass(szClassName); + if (pClass){ + KviKvsObjectFunctionHandler *pHandler=pClass->lookupFunctionHandler(szFunctionName); + if (pHandler){ + pClass->setReminder(szNewReminder,pHandler); + QString szPath; + QString szFileName = szClassName.toLower(); + szFileName += ".kvs"; + szFileName.replace("::","--"); + g_pApp->getLocalKvircDirectory(szPath,KviApp::Classes,szFileName); + pClass->save(szPath); + } + } + currentItemChanged(pFunction,pFunction); + + } + return; + } if (findFunction(szNewFunctionName,pParentClass) && !KviQString::equalCI(szFunctionName,szNewFunctionName)) { g_pClassEditorModule->lock(); @@ -472,7 +498,8 @@ void KviClassEditor::renameFunction() return; } pFunction->setName(szNewFunctionName); - currentItemChanged(pFunction,pFunction); + pFunction->setReminder(szNewReminder); + currentItemChanged(pFunction,pFunction); pFunction->setInternalFunction(bInternal); pParentClass->setClassNotBuilt(true); KviPointerList lInheritedClasses; @@ -653,7 +680,7 @@ void KviClassEditor::renameNamespace(KviClassEditorTreeWidgetItem *pOldNamespace if (pNewItem) { - activateItem(pNewItem); + activateItem(pNewItem); pNewItem->setExpanded(true); } else { activateItem(pOldNamespaceItem); @@ -685,6 +712,14 @@ void KviClassEditor::currentItemChanged(QTreeWidgetItem * it, QTreeWidgetItem *) m_pEditor->setEnabled(false); return; } +/* szLabelText += m_pLastEditedItem->text(0); + szLabelText += ""; + m_pFunctionNameRenameButton->setEnabled(true); + if(!m_pLastEditedItem->reminder().isEmpty()) + szLabelText += m_pLastEditedItem->text(0); + szLabelText += ""; + m_pFunctionNameRenameButton->setEnabled(true); + if(!m_pLastEditedItem->reminder().isEmpty())*/ KviClassEditorTreeWidgetItem * pClassItem; if(m_pLastEditedItem->isMethod()) pClassItem=(KviClassEditorTreeWidgetItem *)m_pLastEditedItem->parent(); else pClassItem=m_pLastEditedItem; @@ -697,9 +732,9 @@ void KviClassEditor::currentItemChanged(QTreeWidgetItem * it, QTreeWidgetItem *) szLabelText += ""; m_pClassNameLabel->setText(szLabelText); m_pClassNameRenameButton->setEnabled(true); - m_pMemberFunctionNameRenameButton->setEnabled(false); + m_pFunctionNameRenameButton->setEnabled(false); m_pInheritsClassNameLabel->setText(""); - m_pMemberFunctionNameLabel->setText(""); + m_pFunctionNameLabel->setText(""); m_pEditor->setText(""); m_pEditor->setEnabled(false); m_pTreeWidget->setFocus(); @@ -723,19 +758,46 @@ void KviClassEditor::currentItemChanged(QTreeWidgetItem * it, QTreeWidgetItem *) szLabelText += ": "; szLabelText += m_pLastEditedItem->text(0); szLabelText += ""; - m_pMemberFunctionNameRenameButton->setEnabled(true); - } - else m_pClassNameRenameButton->setEnabled(true); - m_pMemberFunctionNameLabel->setText(szLabelText); - if(m_pLastEditedItem->isClass()) + m_pFunctionNameRenameButton->setEnabled(true); + if(!m_pLastEditedItem->reminder().isEmpty()) + { + QString szReminderText =__tr2qs_ctx("Reminder text.","editor"); + szReminderText += ": "; + szReminderText += m_pLastEditedItem->reminder(); + szReminderText += ""; + m_pReminderLabel->setText(szReminderText); + m_pReminderLabel->show(); + } + else m_pReminderLabel->hide(); + m_pFunctionNameLabel->setText(szLabelText); + m_pFunctionNameLabel->show(); + m_pFunctionNameRenameButton->show(); + } + else{ + m_pReminderLabel->hide(); + m_pFunctionNameLabel->hide(); + m_pClassNameRenameButton->setEnabled(true); + m_pFunctionNameRenameButton->hide(); + } +// m_pFunctionNameLabel->setText(szLabelText); + if(m_pLastEditedItem->isClass()) { - m_pMemberFunctionNameRenameButton->setEnabled(false); + m_pFunctionNameRenameButton->setEnabled(false); m_pEditor->setText(""); - m_pEditor->setEnabled(false); + m_pEditor->setEnabled(true); m_pTreeWidget->setFocus(); + QString szBuffer; + for(int i=0;ichildCount();i++) + { + KviClassEditorTreeWidgetItem *item=((KviClassEditorTreeWidgetItem *)it->child(i)); + szBuffer+="Member Function: $"+item->name()+"
"; + szBuffer+="Parameters reminder: "+item->reminder()+"

"; + } + m_pEditor->setUnHighlightedText(szBuffer); + m_pEditor->setReadOnly(true); return; } - + m_pEditor->setReadOnly(false); m_pEditor->setText(((KviClassEditorTreeWidgetItem *)it)->buffer()); m_pEditor->setFocus(); m_pEditor->setCursorPosition(((KviClassEditorTreeWidgetItem *)it)->cursorPosition()); @@ -931,7 +993,8 @@ void KviClassEditor::getExportClassBuffer(QString &buffer,KviClassEditorTreeWidg if (pFunction->isInternalFunction()) buffer+="internal "; buffer += "function "; buffer += pFunction->name(); - buffer += "\n\t{\n"; + buffer += "("+pFunction->reminder()+")"; + buffer += "\n\t{\n"; buffer += pFunction->buffer(); buffer += "\n\t}\n"; } @@ -1280,9 +1343,9 @@ bool KviClassEditor::askForClassName(QString &szClassName,QString &szInheritsCla return false; } -bool KviClassEditor::askForFunction(QString &szFunctionName,bool * bInternal,const QString &szClassName, bool bRenameMode) +bool KviClassEditor::askForFunction(QString &szFunctionName,QString &szReminder,bool * bInternal,const QString &szClassName, bool bRenameMode) { - KviClassEditorFunctionDialog *pDialog=new KviClassEditorFunctionDialog(this,"function",szClassName,szFunctionName, *bInternal, bRenameMode); + KviClassEditorFunctionDialog *pDialog=new KviClassEditorFunctionDialog(this,"function",szClassName,szFunctionName,szReminder,*bInternal, bRenameMode); szFunctionName=""; g_pClassEditorModule->lock(); bool bOk=pDialog->exec(); @@ -1290,7 +1353,8 @@ bool KviClassEditor::askForFunction(QString &szFunctionName,bool * bInternal,con if(bOk) { szFunctionName=pDialog->getFunctionName(); - *bInternal=pDialog->isInternalFunction(); + szReminder=pDialog->getReminder(); + *bInternal=pDialog->isInternalFunction(); delete pDialog; return true; } @@ -1406,15 +1470,16 @@ void KviClassEditor::newNamespace() void KviClassEditor::newMemberFunction() { - QString szFunctionName,szClassName; + QString szFunctionName,szClassName,szReminder; if(m_pLastClickedItem->isMethod()) m_pLastClickedItem= (KviClassEditorTreeWidgetItem*)m_pLastClickedItem->parent(); szClassName=buildFullClassName(m_pLastClickedItem); bool bInternal= false; - if(!askForFunction(szFunctionName, &bInternal,szClassName, false)) return; + if(!askForFunction(szFunctionName, szReminder,&bInternal,szClassName, false)) return; if(szFunctionName.isEmpty())return; - KviClassEditorTreeWidgetItem *it=newItem(szFunctionName,KviClassEditorTreeWidgetItem::Method); + KviClassEditorTreeWidgetItem *it=newItem(szFunctionName,KviClassEditorTreeWidgetItem::Method); it->setInternalFunction(bInternal); - activateItem(it); + if(!szReminder.isEmpty()) it->setReminder(szReminder); + activateItem(it); ((KviClassEditorTreeWidgetItem*)it->parent())->setClassNotBuilt(true); } @@ -1433,9 +1498,8 @@ KviClassEditorTreeWidgetItem * KviClassEditor::newItem(QString &szName,KviClass idx++; } KviClassEditorTreeWidgetItem * it; - it=createFullItem(szName); + it=createFullItem(szName); it->setType(eType); - return it; } @@ -1555,15 +1619,20 @@ void KviClassEditor::loadNotBuiltClasses() } for(QString * s = names.first(); s; s = names.next()) { + if (KviQString::equalCI(*s,"@Inherits")) { pClassItem->setInheritsClass(cfg.readQStringEntry(*s,"")); continue; } - QString szCode = cfg.readQStringEntry(*s,""); + if ((*s).left(9)=="@Reminder") continue; + QString szCode = cfg.readQStringEntry(*s,""); KviClassEditorTreeWidgetItem *pFunctionItem=findFunction(*s, pClassItem); if(!pFunctionItem) pFunctionItem = new KviClassEditorTreeWidgetItem(pClassItem,KviClassEditorTreeWidgetItem::Method,*s); pFunctionItem->setBuffer(szCode); + QString szEntry="@Reminder|"+(*s); + QString szReminder = cfg.readQStringEntry(szEntry,""); + pFunctionItem->setReminder(szReminder); } } } @@ -1588,9 +1657,16 @@ void KviClassEditor::saveNotBuiltClasses() cfg.setGroup(it.currentKey()); cfg.writeEntry("@Inherits",it.current()->InheritsClass()); - for(int i=0;ichildCount();i++) - cfg.writeEntry(((KviClassEditorTreeWidgetItem*)it.current()->child(i))->name(),((KviClassEditorTreeWidgetItem*)it.current()->child(i))->buffer()); - } + QString szReminderEntry; + for(int i=0;ichildCount();i++){ + if(!((KviClassEditorTreeWidgetItem*)it.current()->child(i))->reminder().isEmpty()) + { + szReminderEntry="@Reminder|"+((KviClassEditorTreeWidgetItem*)it.current()->child(i))->name(); + cfg.writeEntry(szReminderEntry,((KviClassEditorTreeWidgetItem*)it.current()->child(i))->reminder()); + } + cfg.writeEntry(((KviClassEditorTreeWidgetItem*)it.current()->child(i))->name(),((KviClassEditorTreeWidgetItem*)it.current()->child(i))->buffer()); + } + } ++it; } cfg.sync(); @@ -1796,7 +1872,7 @@ void KviClassEditorDialog::textChanged(const QString & szText) m_pNewClassButton->setEnabled(!szText.isEmpty()); } -KviClassEditorFunctionDialog::KviClassEditorFunctionDialog(QWidget * pParent, const QString & szName, const QString &szClassName, const QString &szFunctionName, bool bIsInternal, bool bRenameMode) +KviClassEditorFunctionDialog::KviClassEditorFunctionDialog(QWidget * pParent, const QString & szName, const QString &szClassName, const QString &szFunctionName, const QString &szReminder,bool bIsInternal, bool bRenameMode) : QDialog(pParent) { setObjectName(szName); @@ -1831,10 +1907,22 @@ KviClassEditorFunctionDialog::KviClassEditorFunctionDialog(QWidget * pParent, co m_pFunctionNameLineEdit->setToolTip(__tr2qs_ctx("Function names can contain only letters, digits and underscores","editor")); m_pFunctionNameLineEdit->setText(szFunctionName); + hbox = new KviTalHBox(this); + hbox->setSpacing(0); + hbox->setMargin(0); + pLayout->addWidget(hbox,2,0); + + QLabel * pReminderLabel = new QLabel(hbox); + pReminderLabel->setObjectName("reminderlabel"); + pReminderLabel->setWordWrap(1); + pReminderLabel->setText(__tr2qs_ctx("Please enter the optional reminder string for the member function:","editor")); + + m_pReminderLineEdit = new QLineEdit(hbox); + m_pReminderLineEdit->setText(szReminder); hbox = new KviTalHBox(this); hbox->setSpacing(0); hbox->setMargin(0); - pLayout->addWidget(hbox,2,0); + pLayout->addWidget(hbox,3,0); QLabel * pFunctionInternalLabel = new QLabel(hbox); diff --git a/src/modules/classeditor/classeditor.h b/src/modules/classeditor/classeditor.h index 2892b8d98..ddd2cf5ab 100644 --- a/src/modules/classeditor/classeditor.h +++ b/src/modules/classeditor/classeditor.h @@ -58,13 +58,16 @@ protected: QString m_szName; QString m_szBuffer; bool m_bClassModified, m_bInternal; - QString m_szInheritsClassName; + QString m_szInheritsClassName,m_szReminder; int m_cPos; public: void setInheritsClass(QString szInheritsClassName){m_szInheritsClassName=szInheritsClassName;}; QString InheritsClass(){return m_szInheritsClassName;}; const QString & name(){ return m_szName; }; void setName(const QString &szName); + void setReminder(const QString &szName){m_szReminder=szName;}; + QString reminder(){return m_szReminder;}; + void setClassNotBuilt(bool bModified); bool classNotBuilt(){return m_bClassModified;}; void setInternalFunction(bool bInternal){m_bInternal=bInternal;}; @@ -109,8 +112,9 @@ public: QLabel * m_pClassNameLabel; QLabel * m_pInheritsClassNameLabel; QPushButton * m_pClassNameRenameButton; - QLabel * m_pMemberFunctionNameLabel; - QPushButton * m_pMemberFunctionNameRenameButton; + QLabel * m_pFunctionNameLabel; + QPushButton * m_pFunctionNameRenameButton; + QLabel * m_pReminderLabel; KviClassEditorTreeWidgetItem * m_pLastEditedItem; KviClassEditorTreeWidgetItem * m_pLastClickedItem; @@ -184,7 +188,7 @@ protected: bool hasSelectedItems(); bool askForClassName(QString &szClassName,QString &szInheritsClassName,bool bEdit); bool askForNamespaceName(const QString &szAction,const QString &szText,const QString &szInitialText, QString &szNameBuffer); - bool askForFunction(QString &szFunctionName,bool * bInternal, const QString &szClassName, bool bRenameMode); + bool askForFunction(QString &szFunctionName,QString &szReminder,bool * bInternal, const QString &szClassName, bool bRenameMode); void searchInheritedClasses(const QString szClass,KviPointerList & lInheritsedClasses); bool classExists(QString &szFullItemName); void renameClass(KviClassEditorTreeWidgetItem *pClassItem); @@ -246,15 +250,18 @@ class KviClassEditorFunctionDialog: public QDialog { Q_OBJECT public: - KviClassEditorFunctionDialog(QWidget * pParent, const QString & szName, const QString & szClassName,const QString &szFunctionName, bool bIsInternal, bool bRenameMode=false); + KviClassEditorFunctionDialog(QWidget * pParent, const QString & szName, const QString & szClassName,const QString &szFunctionName, const QString &szReminder,bool bIsInternal, bool bRenameMode=false); ~KviClassEditorFunctionDialog(); public: QString getFunctionName(){return m_pFunctionNameLineEdit->text();}; + QString getReminder(){return m_pReminderLineEdit->text();}; + bool isInternalFunction(){return m_pInternalCheckBox->isChecked();}; protected: QPushButton * m_pNewFunctionButton; QLineEdit * m_pFunctionNameLineEdit; + QLineEdit * m_pReminderLineEdit; QCheckBox * m_pInternalCheckBox; protected slots: void textChanged(const QString &); -- cgit v1.3.1-10-gc9f91