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

List:       kmymoney-devel
Subject:    [Kmymoney-devel] Tooltip when entering transaction prior to opening
From:       Alvaro Soliverez <asoliverez () gmail ! com>
Date:       2009-11-20 12:29:45
Message-ID: 64e15f8f0911200429v4b7108fcia5e96f5e05151432 () mail ! gmail ! com
[Download RAW message or body]

Thomas just commited a change to the KDE3 version to show a tooltip
when the save is disabled due to the date being prior to the opening
date.

Here's the diff of that commit, which might be helpful to port that
feature to KMM4.

Regards,
Alvaro

---------- Forwarded message ----------
From: Thomas Baumgart <thb@net-bembel.de>
Date: Fri, Nov 20, 2009 at 9:18 AM
Subject: Re: New feature for 1.0.2
To: Alvaro Soliverez <asoliverez@gmail.com>


On Friday 20 November 2009 10:38:23 you wrote:
> On Fri, Nov 20, 2009 at 5:07 AM, Thomas Baumgart <thb@net-bembel.de> wrote:
> > Hi,
> >
> > after all those questions we see that one cannot enter a transaction, I
> > decided to add a little tooltip to the enter button in case it is grayed
> > out to inform people about the fact that the post date is set prior to
> > the account's opening date.
> >
> > This of course will break the translation stuff (as it adds a new string
> > or two).
> >
> > Do you think we should go for it? Would be a nice thing to get a 1.0.3.
> >
> > Let me know. I can easily commit to CVS.
>
> Sure. Go ahead, please!

OK, will do in a second.

Here's the diff which might be helpful for the KDE4 version.

["enter-tooltip.patch" (text/x-diff)]

Index: kmymoney2/kmymoney2.cpp
===================================================================
RCS file: /cvsroot/kmymoney2/kmymoney2/kmymoney2/kmymoney2.cpp,v
retrieving revision 1.395
diff -u -r1.395 kmymoney2.cpp
--- kmymoney2/kmymoney2.cpp	26 Sep 2009 06:59:27 -0000	1.395
+++ kmymoney2/kmymoney2.cpp	20 Nov 2009 12:17:34 -0000
@@ -5318,7 +5318,9 @@
       action("transaction_assign_number")->setEnabled(m_transactionEditor->canAssignNumber());
  action("transaction_new")->setEnabled(false);
       action("transaction_delete")->setEnabled(false);
-      action("transaction_enter")->setEnabled(m_transactionEditor->isComplete());
+      QString reason;
+      action("transaction_enter")->setEnabled(m_transactionEditor->isComplete(reason));
 +      action("transaction_enter")->setToolTip(reason);
       action("transaction_cancel")->setEnabled(true);
     }
   }
Index: kmymoney2/dialogs/investactivities.cpp
===================================================================
RCS file: /cvsroot/kmymoney2/kmymoney2/kmymoney2/dialogs/investactivities.cpp,v
retrieving revision 1.11
diff -u -r1.11 investactivities.cpp
--- kmymoney2/dialogs/investactivities.cpp	21 Dec 2008 21:25:14 -0000	1.11
+++ kmymoney2/dialogs/investactivities.cpp	20 Nov 2009 12:17:34 -0000
@@ -39,7 +39,7 @@
 using namespace Invest;
 using namespace KMyMoneyRegister;
 
-bool Activity::isComplete(void) const
+bool Activity::isComplete(QString& reason) const
 {
   bool rc = false;
   KMyMoneySecurity* security = \
dynamic_cast<KMyMoneySecurity*>(haveWidget("security")); @@ -201,9 +201,9 @@
   setLabelText("total-label", i18n("Total"));
 }
 
-bool Buy::isComplete(void) const
+bool Buy::isComplete(QString& reason) const
 {
-  bool rc = Activity::isComplete();
+  bool rc = Activity::isComplete(reason);
   rc &= haveAssetAccount();
   rc &= haveFees(true);
   rc &= haveInterest(true);
@@ -219,7 +219,8 @@
   Q_UNUSED(security);
   Q_UNUSED(currency);
 
-  if(!isComplete())
+  QString reason;
+  if(!isComplete(reason))
     return false;
 
   kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
@@ -289,9 +290,9 @@
   setLabelText("total-label", i18n("Total"));
 }
 
-bool Sell::isComplete(void) const
+bool Sell::isComplete(QString& reason) const
 {
-  bool rc = Activity::isComplete();
+  bool rc = Activity::isComplete(reason);
   rc &= haveAssetAccount();
   rc &= haveFees(true);
   rc &= haveInterest(true);
@@ -305,7 +306,8 @@
   Q_UNUSED(security);
   Q_UNUSED(currency);
 
-  if(!isComplete())
+  QString reason;
+  if(!isComplete(reason))
     return false;
 
   kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
@@ -368,7 +370,7 @@
   setLabelText("total-label", i18n("Total"));
 }
 
-bool Div::isComplete(void) const
+bool Div::isComplete(QString& reason) const
 {
   bool rc = haveAssetAccount();
   rc &= haveInterest(false);
@@ -381,7 +383,8 @@
   Q_UNUSED(security);
   Q_UNUSED(currency);
 
-  if(!isComplete())
+  QString reason;
+  if(!isComplete(reason))
     return false;
 
   s0.setAction(MyMoneySplit::Dividend);
@@ -426,9 +429,9 @@
   setLabelText("total-label", i18n("Total"));
 }
 
-bool Reinvest::isComplete(void) const
+bool Reinvest::isComplete(QString& reason) const
 {
-  bool rc = Activity::isComplete();
+  bool rc = Activity::isComplete(reason);
   rc &= haveCategoryAndAmount("interest-account", QString(), false);
   rc &= haveFees(true);
   rc &= haveShares();
@@ -442,7 +445,8 @@
   Q_UNUSED(security);
   Q_UNUSED(currency);
 
-  if(!isComplete())
+  QString reason;
+  if(!isComplete(reason))
     return false;
 
   kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
@@ -504,9 +508,9 @@
   setLabelText("shares-label", i18n("Shares"));
 }
 
-bool Add::isComplete(void) const
+bool Add::isComplete(QString& reason) const
 {
-  bool rc = Activity::isComplete();
+  bool rc = Activity::isComplete(reason);
   rc &= haveShares();
   return rc;
 }
@@ -520,7 +524,8 @@
   Q_UNUSED(security);
   Q_UNUSED(currency);
 
-  if(!isComplete())
+  QString reason;
+  if(!isComplete(reason))
     return false;
 
   kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
@@ -544,9 +549,9 @@
   setLabelText("shares-label", i18n("Shares"));
 }
 
-bool Remove::isComplete(void) const
+bool Remove::isComplete(QString& reason) const
 {
-  bool rc = Activity::isComplete();
+  bool rc = Activity::isComplete(reason);
   rc &= haveShares();
   return rc;
 }
@@ -560,7 +565,8 @@
   Q_UNUSED(security);
   Q_UNUSED(currency);
 
-  if(!isComplete())
+  QString reason;
+  if(!isComplete(reason))
     return false;
 
   kMyMoneyEdit* sharesEdit = dynamic_cast<kMyMoneyEdit*>(haveWidget("shares"));
@@ -586,9 +592,9 @@
   setLabelText("shares-label", i18n("Ratio 1/"));
 }
 
-bool Split::isComplete(void) const
+bool Split::isComplete(QString& reason) const
 {
-  bool rc = Activity::isComplete();
+  bool rc = Activity::isComplete(reason);
   rc &= haveShares();
   return rc;
 }
Index: kmymoney2/dialogs/investactivities.h
===================================================================
RCS file: /cvsroot/kmymoney2/kmymoney2/kmymoney2/dialogs/investactivities.h,v
retrieving revision 1.6
diff -u -r1.6 investactivities.h
--- kmymoney2/dialogs/investactivities.h	21 Dec 2008 21:25:14 -0000	1.6
+++ kmymoney2/dialogs/investactivities.h	20 Nov 2009 12:17:34 -0000
@@ -37,7 +37,7 @@
 public:
   virtual MyMoneySplit::investTransactionTypeE type(void) const = 0;
   virtual void showWidgets(void) const = 0;
-  virtual bool isComplete(void) const = 0;
+  virtual bool isComplete(QString& reason) const = 0;
 
   /**
     * Create a transaction @p t based on the split @p s0 and the data contained
@@ -80,7 +80,7 @@
   virtual ~Buy() {}
   virtual MyMoneySplit::investTransactionTypeE type(void) const { return \
MyMoneySplit::BuyShares; }  virtual void showWidgets(void) const;
-  virtual bool isComplete(void) const;
+  virtual bool isComplete(QString& reason) const;
   virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, \
MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, \
QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, \
QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, \
MyMoneySecurity& currency);  };
 
@@ -91,7 +91,7 @@
   virtual ~Sell() {}
   virtual MyMoneySplit::investTransactionTypeE type(void) const { return \
MyMoneySplit::SellShares; }  virtual void showWidgets(void) const;
-  virtual bool isComplete(void) const;
+  virtual bool isComplete(QString& reason) const;
   virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, \
MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, \
QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, \
QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, \
MyMoneySecurity& currency);  };
 
@@ -102,7 +102,7 @@
   virtual ~Div() {}
   virtual MyMoneySplit::investTransactionTypeE type(void) const { return \
MyMoneySplit::Dividend; }  virtual void showWidgets(void) const;
-  virtual bool isComplete(void) const;
+  virtual bool isComplete(QString& reason) const;
   virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, \
MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, \
QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, \
QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, \
MyMoneySecurity& currency);  };
 
@@ -113,7 +113,7 @@
   virtual ~Reinvest() {}
   virtual MyMoneySplit::investTransactionTypeE type(void) const { return \
MyMoneySplit::ReinvestDividend; }  virtual void showWidgets(void) const;
-  virtual bool isComplete(void) const;
+  virtual bool isComplete(QString& reason) const;
   virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, \
MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, \
QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, \
QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, \
MyMoneySecurity& currency);  };
 
@@ -124,7 +124,7 @@
   virtual ~Add() {}
   virtual MyMoneySplit::investTransactionTypeE type(void) const { return \
MyMoneySplit::AddShares; }  virtual void showWidgets(void) const;
-  virtual bool isComplete(void) const;
+  virtual bool isComplete(QString& reason) const;
   virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, \
MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, \
QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, \
QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, \
MyMoneySecurity& currency);  };
 
@@ -135,7 +135,7 @@
   virtual ~Remove() {}
   virtual MyMoneySplit::investTransactionTypeE type(void) const { return \
MyMoneySplit::RemoveShares; }  virtual void showWidgets(void) const;
-  virtual bool isComplete(void) const;
+  virtual bool isComplete(QString& reason) const;
   virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, \
MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, \
QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, \
QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, \
MyMoneySecurity& currency);  };
 
@@ -146,7 +146,7 @@
   virtual ~Split() {}
   virtual MyMoneySplit::investTransactionTypeE type(void) const { return \
MyMoneySplit::SplitShares; }  virtual void showWidgets(void) const;
-  virtual bool isComplete(void) const;
+  virtual bool isComplete(QString& reason) const;
   virtual bool createTransaction(MyMoneyTransaction& t, MyMoneySplit& s0, \
MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& feeSplits, \
QValueList<MyMoneySplit>& m_feeSplits, QValueList<MyMoneySplit>& interestSplits, \
QValueList<MyMoneySplit>& m_interestSplits, MyMoneySecurity& security, \
MyMoneySecurity& currency);  };
 
Index: kmymoney2/dialogs/investtransactioneditor.cpp
===================================================================
RCS file: /cvsroot/kmymoney2/kmymoney2/kmymoney2/dialogs/investtransactioneditor.cpp,v
 retrieving revision 1.25
diff -u -r1.25 investtransactioneditor.cpp
--- kmymoney2/dialogs/investtransactioneditor.cpp	3 Jul 2009 19:56:28 -0000	1.25
+++ kmymoney2/dialogs/investtransactioneditor.cpp	20 Nov 2009 12:17:35 -0000
@@ -694,9 +694,11 @@
   return 0; // let the creator use the first widget in the tab order
 }
 
-bool InvestTransactionEditor::isComplete(void) const
+bool InvestTransactionEditor::isComplete(QString& reason) const
 {
-  return d->m_activity->isComplete();
+  reason = QString();
+  // reason.clear();  // for Qt4
+  return d->m_activity->isComplete(reason);
 }
 
 MyMoneyMoney InvestTransactionEditor::subtotal(const QValueList<MyMoneySplit>& \
                splits) const
Index: kmymoney2/dialogs/investtransactioneditor.h
===================================================================
RCS file: /cvsroot/kmymoney2/kmymoney2/kmymoney2/dialogs/investtransactioneditor.h,v
retrieving revision 1.10
diff -u -r1.10 investtransactioneditor.h
--- kmymoney2/dialogs/investtransactioneditor.h	9 Jan 2009 10:10:35 -0000	1.10
+++ kmymoney2/dialogs/investtransactioneditor.h	20 Nov 2009 12:17:35 -0000
@@ -54,9 +54,13 @@
     * @retval false if not enough information is present to enter the
     * transaction into the engine
     *
+    * @param reason will be filled with a string about the reason why the
+    *               completeness is not reached.  Empty if the return value
+    *               is @c true.
+    *
     * @sa transactionDataSufficient()
     */
-  virtual bool isComplete(void) const;
+  virtual bool isComplete(QString& reason) const;
 
   virtual QWidget* firstWidget(void) const;
 
Index: kmymoney2/dialogs/transactioneditor.cpp
===================================================================
RCS file: /cvsroot/kmymoney2/kmymoney2/kmymoney2/dialogs/transactioneditor.cpp,v
retrieving revision 1.48
diff -u -r1.48 transactioneditor.cpp
--- kmymoney2/dialogs/transactioneditor.cpp	3 Oct 2009 08:03:02 -0000	1.48
+++ kmymoney2/dialogs/transactioneditor.cpp	20 Nov 2009 12:17:36 -0000
@@ -228,7 +228,8 @@
 
 void TransactionEditor::slotUpdateButtonState(void)
 {
-  emit transactionDataSufficient(isComplete());
+  QString reason;
+  emit transactionDataSufficient(isComplete(reason));
 }
 
 QWidget* TransactionEditor::haveWidget(const QString& name) const
@@ -1736,11 +1737,15 @@
   return amount;
 }
 
-bool StdTransactionEditor::isComplete(void) const
+bool StdTransactionEditor::isComplete(QString& reason) const
 {
+  reason = QString();
+  // reason.clear();  // for Qt4
+
   QMap<QString, QWidget*>::const_iterator it_w;
   kMyMoneyDateInput* postDate = \
dynamic_cast<kMyMoneyDateInput*>(m_editWidgets["postdate"]);  \
if(postDate->date().isValid() && (postDate->date() < m_account.openingDate())) { +    \
reason = i18n("Cannot enter transaction with postdate prior to account's opening \
date.");  return false;
   }
 
Index: kmymoney2/dialogs/transactioneditor.h
===================================================================
RCS file: /cvsroot/kmymoney2/kmymoney2/kmymoney2/dialogs/transactioneditor.h,v
retrieving revision 1.19
diff -u -r1.19 transactioneditor.h
--- kmymoney2/dialogs/transactioneditor.h	3 Oct 2009 08:03:02 -0000	1.19
+++ kmymoney2/dialogs/transactioneditor.h	20 Nov 2009 12:17:36 -0000
@@ -104,9 +104,13 @@
     * @retval false if not enough information is present to enter the
     * transaction into the engine
     *
+    * @param reason will be filled with a string about the reason why the
+    *               completeness is not reached.  Empty if the return value
+    *               is @c true.
+    *
     * @sa transactionDataSufficient()
     */
-  virtual bool isComplete(void) const = 0;
+  virtual bool isComplete(QString& reason) const = 0;
 
   /**
     * This method returns information if the editor is started with multiple \
transactions @@ -298,7 +302,7 @@
   StdTransactionEditor(TransactionEditorContainer* regForm, \
KMyMoneyRegister::Transaction* item, const KMyMoneyRegister::SelectedTransactions& \
list, const QDate& lastPostDate);  ~StdTransactionEditor();
 
-  bool isComplete(void) const;
+  bool isComplete(QString& reason) const;
   QWidget* firstWidget(void) const;
 
   bool eventFilter(QObject* o, QEvent* e);



_______________________________________________
KMyMoney-devel mailing list
KMyMoney-devel@kde.org
https://mail.kde.org/mailman/listinfo/kmymoney-devel


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

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