*** mythtv-0.25/programs/mythfrontend/customedit.cpp	2012-05-17 17:10:23.000000000 +0200
--- mythtv-0.25-mod/programs/mythfrontend/customedit.cpp	2012-05-17 20:23:41.000000000 +0200
***************
*** 35,40 ****
--- 35,41 ----
      m_baseTitle.remove(QRegExp(" \\(.*\\)$"));
  
      m_maxex = 0;
+ 	m_evaluate = 1;	// default: evaluate
      m_seSuffix = QString(" (%1)").arg(tr("stored search"));
      m_exSuffix = QString(" (%1)").arg(tr("stored example"));
  
***************
*** 150,165 ****
      textChanged();
  }
  
! void CustomEdit::loadClauses()
  {
!     QString quoteTitle = m_baseTitle;
!     quoteTitle.replace("\'","\'\'");
  
      CustomRuleInfo rule;
  
      rule.title = tr("Match an exact title");
      if (!m_baseTitle.isEmpty())
!         rule.description = QString("program.title = '%1' ").arg(quoteTitle);
      else
          rule.description = "program.title = 'Nova' ";
      new MythUIButtonListItem(m_clauseList, rule.title,
--- 151,231 ----
      textChanged();
  }
  
! QString CustomEdit::evaluate(QString clause)
  {
!     int s0=0;
!     int e0=0;
! 
!     while (1) {
!         s0 = clause.indexOf (QRegExp("\\{[A-Z]+\\}"), e0);
! 
!         if (s0 < 0)
!             break;
! 
!         e0 = clause.indexOf ("}", s0);
! 
!         QString mid = clause.mid(s0 + 1, e0 - s0 - 1);
!         QString repl = "";
! 
!         if (!mid.compare("TITLE")) {
!             repl = m_pginfo->GetTitle();
!             repl.replace("\'","\'\'");
!         } else if (!mid.compare("SUBTITLE")) {
!             repl = m_pginfo->GetSubtitle();
!             repl.replace("\'","\'\'");
!         } else if (!mid.compare("DESCR")) {
!             repl = m_pginfo->GetDescription();
!             repl.replace("\'","\'\'");
!         } else if (!mid.compare("SERIESID")) {
!             repl = QString("%1").arg(m_pginfo->GetSeriesID());
!         } else if (!mid.compare("PROGID")) {
!             repl = m_pginfo->GetProgramID();
!         } else if (!mid.compare("SEASON")) {
!             repl = QString::number(m_pginfo->GetSeason());
!         } else if (!mid.compare("EPISODE")) {
!             repl = QString::number(m_pginfo->GetEpisode());
!         } else if (!mid.compare("CATEGORY")) {
!             repl = m_pginfo->GetCategory();
!         } else if (!mid.compare("CHANID")) {
!             repl = QString("%1").arg(m_pginfo->GetChanID());
!         } else if (!mid.compare("CHANNUM")) {
!             repl = m_pginfo->GetChanNum();
!         } else if (!mid.compare("SCHEDID")) {
!             repl = m_pginfo->GetChannelSchedulingID();
!         } else if (!mid.compare("CHANNAME")) {
!             repl = m_pginfo->GetChannelName();
!         } else if (!mid.compare("DAYNAME")) {
!             repl = m_pginfo->GetScheduledStartTime().toString("dddd");
!         } else if (!mid.compare("STARTDATE")) {
!             repl = m_pginfo->GetScheduledStartTime().toString("yyyy-mm-dd hh:mm:ss");
!         } else if (!mid.compare("ENDDATE")) {
!             repl = m_pginfo->GetScheduledEndTime().toString("yyyy-mm-dd hh:mm:ss");
!         } else if (!mid.compare("STARTTIME")) {
!             repl = m_pginfo->GetScheduledStartTime().toString("hh:mm");
!         } else if (!mid.compare("ENDTIME")) {
!             repl = m_pginfo->GetScheduledEndTime().toString("hh:mm");
!         } else if (!mid.compare("STARTSEC")) {
!             QDateTime date = m_pginfo->GetScheduledStartTime();
!             QDateTime midnight = QDateTime(date.date());
!             repl = QString("%1").arg(midnight.secsTo(date));
!         } else if (!mid.compare("ENDSEC")) {
!             QDateTime date = m_pginfo->GetScheduledEndTime(); 
!             QDateTime midnight = QDateTime(date.date());
!             repl = QString("%1").arg(midnight.secsTo(date));
!         }
!         // unknown tags are simply removed
!         clause.replace(s0, e0 - s0 + 1, repl);
!     }
!     return clause;
! }
  
+ void CustomEdit::loadClauses()
+ {
      CustomRuleInfo rule;
  
      rule.title = tr("Match an exact title");
      if (!m_baseTitle.isEmpty())
!         rule.description = QString("program.title = '{TITLE}' ");
      else
          rule.description = "program.title = 'Nova' ";
      new MythUIButtonListItem(m_clauseList, rule.title,
***************
*** 169,176 ****
      {
          rule.title = tr("Match this series");
          rule.subtitle.clear();
!         rule.description = QString("program.seriesid = '%1' ")
!             .arg(m_pginfo->GetSeriesID());
          new MythUIButtonListItem(m_clauseList, rule.title,
                                   qVariantFromValue(rule));
      }
--- 235,241 ----
      {
          rule.title = tr("Match this series");
          rule.subtitle.clear();
!         rule.description = QString("program.seriesid = '{SERIESID}' ");
          new MythUIButtonListItem(m_clauseList, rule.title,
                                   qVariantFromValue(rule));
      }
***************
*** 178,185 ****
      rule.title = tr("Match words in the title");
      rule.subtitle.clear();
      if (!m_pginfo->GetTitle().isEmpty())
!         rule.description = QString("program.title LIKE '%%1%' ")
!                                    .arg(quoteTitle);
      else
          rule.description = "program.title LIKE 'CSI: %' ";
      new MythUIButtonListItem(m_clauseList, rule.title,
--- 243,249 ----
      rule.title = tr("Match words in the title");
      rule.subtitle.clear();
      if (!m_pginfo->GetTitle().isEmpty())
!         rule.description = QString("program.title LIKE '%{TITLE}%' ");
      else
          rule.description = "program.title LIKE 'CSI: %' ";
      new MythUIButtonListItem(m_clauseList, rule.title,
***************
*** 188,199 ****
      rule.title = tr("Match words in the subtitle");
      rule.subtitle.clear();
      if (!m_pginfo->GetSubtitle().isEmpty())
!     {
!         QString subt = m_pginfo->GetSubtitle();
!         subt.replace("\'","\'\'");
!         rule.description = QString("program.subtitle LIKE '%%1%' ")
!                                    .arg(subt);
!     }
      else
          rule.description = "program.subtitle LIKE '%Las Vegas%' ";
      new MythUIButtonListItem(m_clauseList, rule.title,
--- 252,258 ----
      rule.title = tr("Match words in the subtitle");
      rule.subtitle.clear();
      if (!m_pginfo->GetSubtitle().isEmpty())
!         rule.description = QString("program.subtitle LIKE '%{SUBTITLE}%' ");
      else
          rule.description = "program.subtitle LIKE '%Las Vegas%' ";
      new MythUIButtonListItem(m_clauseList, rule.title,
***************
*** 203,219 ****
      {
          rule.title = tr("Match this episode");
          rule.subtitle.clear();
!         rule.description = QString("program.programid = '%1' ")
!             .arg(m_pginfo->GetProgramID());
      }
      else if (!m_pginfo->GetSubtitle().isEmpty())
      {
          rule.title = tr("Match this episode");
          rule.subtitle.clear();
!         rule.description = QString("program.subtitle = '%1' \n"
!                                    "AND program.description = '%2' ")
!             .arg(m_pginfo->GetSubtitle().replace("\'","\'\'"))
!             .arg(m_pginfo->GetDescription().replace("\'","\'\'"));
      }
      else
      {
--- 262,275 ----
      {
          rule.title = tr("Match this episode");
          rule.subtitle.clear();
!         rule.description = QString("program.programid = '{PROGID}' ");
      }
      else if (!m_pginfo->GetSubtitle().isEmpty())
      {
          rule.title = tr("Match this episode");
          rule.subtitle.clear();
!         rule.description = QString("program.subtitle = '{SUBTITLE}' \n"
!                                    "AND program.description = '{DESCR}' ");
      }
      else
      {
***************
*** 259,266 ****
  
      rule.title = tr("Anytime on a specific day of the week");
      rule.subtitle.clear();
!     rule.description = QString("DAYNAME(program.starttime) = '%1' ")
!         .arg(m_pginfo->GetScheduledStartTime().toString("dddd"));
      new MythUIButtonListItem(m_clauseList, rule.title,
                               qVariantFromValue(rule));
  
--- 315,321 ----
  
      rule.title = tr("Anytime on a specific day of the week");
      rule.subtitle.clear();
!     rule.description = QString("DAYNAME(program.starttime) = '{DAYNAME}' ");
      new MythUIButtonListItem(m_clauseList, rule.title,
                               qVariantFromValue(rule));
  
***************
*** 293,300 ****
      rule.title = tr("Only on a specific station");
      rule.subtitle.clear();
      if (!m_pginfo->GetChannelSchedulingID().isEmpty())
!         rule.description = QString("channel.callsign = '%1' ")
!             .arg(m_pginfo->GetChannelSchedulingID());
      else
          rule.description = "channel.callsign = 'ESPN' ";
      new MythUIButtonListItem(m_clauseList, rule.title,
--- 348,354 ----
      rule.title = tr("Only on a specific station");
      rule.subtitle.clear();
      if (!m_pginfo->GetChannelSchedulingID().isEmpty())
!         rule.description = QString("channel.callsign = '{SCHEDID}' ");
      else
          rule.description = "channel.callsign = 'ESPN' ";
      new MythUIButtonListItem(m_clauseList, rule.title,
***************
*** 366,373 ****
      rule.title = tr("Limit by category");
      rule.subtitle.clear();
      if (!m_pginfo->GetCategory().isEmpty())
!         rule.description = QString("program.category = '%1' ")
!             .arg(m_pginfo->GetCategory());
      else
          rule.description = "program.category = 'Reality' ";
      new MythUIButtonListItem(m_clauseList, rule.title,
--- 420,426 ----
      rule.title = tr("Limit by category");
      rule.subtitle.clear();
      if (!m_pginfo->GetCategory().isEmpty())
!         rule.description = QString("program.category = '{CATEGORY}' ");
      else
          rule.description = "program.category = 'Reality' ";
      new MythUIButtonListItem(m_clauseList, rule.title,
***************
*** 378,385 ****
                      "program.chanid = programgenres.chanid AND "
                      "program.starttime = programgenres.starttime ";
      if (!m_pginfo->GetCategory().isEmpty())
!         rule.description = QString("programgenres.genre = '%1' ")
!             .arg(m_pginfo->GetCategory());
      else
          rule.description = "programgenres.genre = 'Reality' ";
      new MythUIButtonListItem(m_clauseList, rule.title,
--- 431,437 ----
                      "program.chanid = programgenres.chanid AND "
                      "program.starttime = programgenres.starttime ";
      if (!m_pginfo->GetCategory().isEmpty())
!         rule.description = QString("programgenres.genre = '{CATEGORY}' ");
      else
          rule.description = "programgenres.genre = 'Reality' ";
      new MythUIButtonListItem(m_clauseList, rule.title,
***************
*** 545,551 ****
  
      CustomRuleInfo rule = qVariantValue<CustomRuleInfo>(item->GetData());
  
!     QString msg = rule.description;
      msg.replace('\n', ' ');
      msg.replace(QRegExp(" [ ]*"), " ");
      msg = QString("\"%1\"").arg(msg);
--- 597,603 ----
  
      CustomRuleInfo rule = qVariantValue<CustomRuleInfo>(item->GetData());
  
!     QString msg = (m_evaluate) ? evaluate(rule.description) : rule.description;
      msg.replace('\n', ' ');
      msg.replace(QRegExp(" [ ]*"), " ");
      msg = QString("\"%1\"").arg(msg);
***************
*** 570,576 ****
  
      if (desc.contains(QRegExp("\\S")))
          clause = "AND ";
!     clause += rule.description;
      m_descriptionEdit->SetText(desc.append(clause));
  
      QString sub = m_subtitleEdit->GetText();
--- 622,629 ----
  
      if (desc.contains(QRegExp("\\S")))
          clause = "AND ";
!     clause += (m_evaluate) ? evaluate(rule.description) : rule.description;
! 
      m_descriptionEdit->SetText(desc.append(clause));
  
      QString sub = m_subtitleEdit->GetText();
***************
*** 586,592 ****
  
      MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
      ProgLister *pl = new ProgLister(mainStack, plSQLSearch,
!                                     m_descriptionEdit->GetText(),
                                      m_subtitleEdit->GetText());
      if (pl->Create())
      {
--- 639,645 ----
  
      MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
      ProgLister *pl = new ProgLister(mainStack, plSQLSearch,
!                                     evaluate(m_descriptionEdit->GetText()),
                                      m_subtitleEdit->GetText());
      if (pl->Create())
      {
***************
*** 610,622 ****
      if (cur_recid > 0)
      {
          record->ModifyPowerSearchByID(cur_recid, m_titleEdit->GetText(),
!                                       m_descriptionEdit->GetText(),
                                        m_subtitleEdit->GetText());
      }
      else
      {
          record->LoadBySearch(kPowerSearch, m_titleEdit->GetText(),
!                              m_descriptionEdit->GetText(),
                               m_subtitleEdit->GetText());
      }
  
--- 663,675 ----
      if (cur_recid > 0)
      {
          record->ModifyPowerSearchByID(cur_recid, m_titleEdit->GetText(),
!                                       evaluate(m_descriptionEdit->GetText()),
                                        m_subtitleEdit->GetText());
      }
      else
      {
          record->LoadBySearch(kPowerSearch, m_titleEdit->GetText(),
!                              evaluate(m_descriptionEdit->GetText()),
                               m_subtitleEdit->GetText());
      }
  
***************
*** 700,706 ****
      bool ret = false;
      QString msg;
  
!     QString desc = m_descriptionEdit->GetText();
      QString from = m_subtitleEdit->GetText();
      if (desc.contains(QRegExp("^\\s*AND\\s", Qt::CaseInsensitive)))
      {
--- 753,759 ----
      bool ret = false;
      QString msg;
  
!     QString desc = evaluate(m_descriptionEdit->GetText());
      QString from = m_subtitleEdit->GetText();
      if (desc.contains(QRegExp("^\\s*AND\\s", Qt::CaseInsensitive)))
      {
***************
*** 867,873 ****
              // else if (GetFocusWidget() == m_ruleList)
              //     deleteRecordingRule();
          }
!         else
              handled = false;
      }
  
--- 920,932 ----
              // else if (GetFocusWidget() == m_ruleList)
              //     deleteRecordingRule();
          }
!         else if (action == "EDIT")
!         {
!             // toggle evaluated/unevaluated sample view
!             m_evaluate = 1-m_evaluate;
!             MythUIButtonListItem* item = m_clauseList->GetItemCurrent();
!             clauseChanged(item);
!         } else
              handled = false;
      }
  
*** mythtv-0.25/programs/mythfrontend/customedit.h	2012-05-17 17:15:49.000000000 +0200
--- mythtv-0.25-mod/programs/mythfrontend/customedit.h	2012-05-17 17:15:27.000000000 +0200
***************
*** 39,48 ****
--- 39,51 ----
      void storeRule(bool is_search, bool is_new);
      void deleteRule(void);
  
+     QString evaluate(QString clause);
+ 
      ProgramInfo *m_pginfo;
      QString m_baseTitle;
  
      int m_maxex;
+     int m_evaluate;
   
      QString m_seSuffix;
      QString m_exSuffix;
