Ticket #5759: mythtv-5759-add_support_for_manage_rules.5.patch

File mythtv-5759-add_support_for_manage_rules.5.patch, 30.4 KB (added by sphery <mtdean@…>, 15 years ago)

Updated patch, uses constructor to pass the object name and uses object name to determine which window to load.

Line 
1Index: mythtv/programs/mythfrontend/programrecpriority.cpp
2===================================================================
3--- mythtv.orig/programs/mythfrontend/programrecpriority.cpp    2009-07-22 21:41:54.000000000 -0400
4+++ mythtv/programs/mythfrontend/programrecpriority.cpp 2009-07-22 22:00:07.000000000 -0400
5@@ -10,6 +10,7 @@
6 #include "scheduledrecording.h"
7 #include "customedit.h"
8 #include "proglist.h"
9+#include "storagegroup.h"
10 
11 #include "mythdb.h"
12 #include "mythverbose.h"
13@@ -28,7 +29,8 @@
14     ProgramInfo(),
15     recTypeRecPriority(0), recType(kNotRecording),
16     matchCount(0),         recCount(0),
17-    avg_delay(0),          autoRecPriority(0)
18+    avg_delay(0),          autoRecPriority(0),
19+    profile("")
20 {
21 }
22 
23@@ -40,7 +42,8 @@
24     matchCount(other.matchCount),
25     recCount(other.recCount),
26     avg_delay(other.avg_delay),
27-    autoRecPriority(other.autoRecPriority)
28+    autoRecPriority(other.autoRecPriority),
29+    profile(other.profile)
30 {
31     // TODO CHECK: should last_record be initialized too? -- dtk 22-12-2008
32 }
33@@ -61,6 +64,7 @@
34     last_record        = QDateTime();
35     avg_delay          = 0;
36     autoRecPriority    = 0;
37+    profile            = "";
38 #endif
39 
40     return *this;
41@@ -317,12 +321,16 @@
42 
43 ////////////////////////////////////////////////////////
44 
45-ProgramRecPriority::ProgramRecPriority(MythScreenStack *parent)
46-                   : MythScreenType(parent, "ProgramRecPriority")
47+ProgramRecPriority::ProgramRecPriority(MythScreenStack *parent,
48+                                       const QString &name)
49+                   : MythScreenType(parent, name)
50 {
51     m_sortType = (SortType)gContext->GetNumSetting("ProgramRecPrioritySorting",
52                                                  (int)byTitle);
53     m_reverseSort = gContext->GetNumSetting("ProgramRecPriorityReverse", 0);
54+    m_formatShortDate = gContext->GetSetting("ShortDateFormat", "M/d");
55+    m_formatLongDate  = gContext->GetSetting("DateFormat", "ddd MMMM d");
56+    m_formatTime      = gContext->GetSetting("TimeFormat", "h:mm AP");
57 }
58 
59 ProgramRecPriority::~ProgramRecPriority()
60@@ -331,17 +339,32 @@
61 
62 bool ProgramRecPriority::Create()
63 {
64-    if (!LoadWindowFromXML("schedule-ui.xml", "programrecpriority", this))
65+    QString window_name = "programrecpriority";
66+    if (objectName() == "ManageRecRules")
67+        window_name = "managerecrules";
68+
69+    if (!LoadWindowFromXML("schedule-ui.xml", window_name, this))
70         return false;
71 
72     m_programList = dynamic_cast<MythUIButtonList *> (GetChild("programs"));
73 
74+    m_descriptionText = dynamic_cast<MythUIText *> (GetChild("description"));
75+    m_categoryText = dynamic_cast<MythUIText *> (GetChild("category"));
76     m_schedInfoText = dynamic_cast<MythUIText *> (GetChild("scheduleinfo"));
77     m_rectypePriorityText = dynamic_cast<MythUIText *>
78                                                  (GetChild("rectypepriority"));
79     m_recPriorityText = dynamic_cast<MythUIText *> (GetChild("recpriority"));
80     m_recPriorityBText = dynamic_cast<MythUIText *> (GetChild("recpriorityb"));
81     m_finalPriorityText = dynamic_cast<MythUIText *> (GetChild("finalpriority"));
82+    m_recGroupText = dynamic_cast<MythUIText *> (GetChild("recordinggroup"));
83+    m_storageGroupText = dynamic_cast<MythUIText *> (GetChild("storagegroup"));
84+    m_lastRecordedText = dynamic_cast<MythUIText *> (GetChild("lastrecorded"));
85+    m_lastRecordedDateText = dynamic_cast<MythUIText *> (GetChild("lastrecordeddate"));
86+    m_lastRecordedTimeText = dynamic_cast<MythUIText *> (GetChild("lastrecordedtime"));
87+    m_channameText = dynamic_cast<MythUIText *> (GetChild("channel"));
88+    m_channumText = dynamic_cast<MythUIText *> (GetChild("channum"));
89+    m_callsignText = dynamic_cast<MythUIText *> (GetChild("callsign"));
90+    m_recProfileText = dynamic_cast<MythUIText *> (GetChild("recordingprofile"));
91 
92     if (!m_programList)
93     {
94@@ -1067,7 +1090,7 @@
95 
96     MSqlQuery result(MSqlQuery::InitCon());
97     result.prepare("SELECT recordid, title, chanid, starttime, startdate, "
98-                   "type, inactive, last_record, avg_delay "
99+                   "type, inactive, last_record, avg_delay, profile "
100                    "FROM record;");
101 
102     if (!result.exec())
103@@ -1088,6 +1111,7 @@
104             int inactive = result.value(6).toInt();
105             QDateTime lastrec = result.value(7).toDateTime();
106             int avgd = result.value(8).toInt();
107+            QString profile = result.value(9).toString();
108 
109             // find matching program in m_programData and set
110             // recTypeRecPriority and recType
111@@ -1107,6 +1131,7 @@
112                     progInfo->recCount = m_recMatch[progInfo->recordid];
113                     progInfo->last_record = lastrec;
114                     progInfo->avg_delay = avgd;
115+                    progInfo->profile = profile;
116 
117                     if (autopriority)
118                         progInfo->autoRecPriority =
119@@ -1315,8 +1340,56 @@
120         progInfo->ToMap(infoMap);
121         item->SetTextFromMap(infoMap, state);
122 
123+        item->SetText(progInfo->description, "description", state);
124+        item->SetText(progInfo->category, "category", state);
125         item->SetText(QString::number(progRecPriority), "progpriority", state);
126         item->SetText(QString::number(finalRecPriority), "finalpriority", state);
127+
128+        QString recgroup = progInfo->recgroup;
129+        if (recgroup == "Default")
130+            recgroup = tr("Default");
131+        item->SetText(recgroup, "recordinggroup", state);
132+        QString storagegroup = progInfo->storagegroup;
133+        if (storagegroup == "Default")
134+            storagegroup = tr("Default");
135+        else if (StorageGroup::kSpecialGroups.contains(storagegroup))
136+            storagegroup = tr(storagegroup.toLatin1().constData());
137+        item->SetText(storagegroup, "storagegroup", state);
138+
139+        QString tempDateTime = (progInfo->last_record).toString(m_formatLongDate + ' ' + m_formatTime);
140+        item->SetText(tempDateTime, "lastrecorded", state);
141+        QString tempDate = (progInfo->last_record).toString(m_formatShortDate);
142+        item->SetText(tempDate, "lastrecordeddate", state);
143+        QString tempTime = (progInfo->last_record).toString(m_formatTime);
144+        item->SetText(tempTime, "lastrecordedtime", state);
145+
146+        QString channame = progInfo->channame;
147+        if ((progInfo->recType == kAllRecord) ||
148+            (progInfo->recType == kFindOneRecord) ||
149+            (progInfo->recType == kFindDailyRecord) ||
150+            (progInfo->recType == kFindWeeklyRecord))
151+            channame = tr("Any");
152+        item->SetText(channame, "channel", state);
153+        QString channum = progInfo->chanstr;
154+        if ((progInfo->recType == kAllRecord) ||
155+            (progInfo->recType == kFindOneRecord) ||
156+            (progInfo->recType == kFindDailyRecord) ||
157+            (progInfo->recType == kFindWeeklyRecord))
158+            channum = tr("Any");
159+        item->SetText(channum, "channum", state);
160+        QString callsign = progInfo->chansign;
161+        if ((progInfo->recType == kAllRecord) ||
162+            (progInfo->recType == kFindOneRecord) ||
163+            (progInfo->recType == kFindDailyRecord) ||
164+            (progInfo->recType == kFindWeeklyRecord))
165+            callsign = tr("Any");
166+        item->SetText(callsign, "callsign", state);
167+
168+        QString profile = progInfo->profile;
169+        if ((profile == "Default") || (profile == "Live TV") ||
170+            (profile == "High Quality") || (profile == "Low Quality"))
171+            profile = tr(profile.toLatin1().constData());
172+        item->SetText(profile, "recordingprofile", state);
173         item->DisplayState(state, "status");
174 
175         if (m_currentItem == progInfo)
176@@ -1374,6 +1447,12 @@
177     pgRecInfo->ToMap(infoMap);
178     SetTextFromMap(infoMap);
179 
180+    if (m_descriptionText)
181+        m_descriptionText->SetText(pgRecInfo->description);
182+
183+    if (m_categoryText)
184+        m_categoryText->SetText(pgRecInfo->category);
185+
186     if (m_schedInfoText)
187         m_schedInfoText->SetText(subtitle);
188 
189@@ -1397,6 +1476,84 @@
190     if (m_finalPriorityText)
191         m_finalPriorityText->SetText(QString::number(finalRecPriority));
192 
193+    if (m_recGroupText)
194+    {
195+        QString recgroup = pgRecInfo->recgroup;
196+        if (recgroup == "Default")
197+            recgroup = tr("Default");
198+        m_recGroupText->SetText(recgroup);
199+    }
200+
201+    if (m_storageGroupText)
202+    {
203+        QString storagegroup = pgRecInfo->storagegroup;
204+        if (storagegroup == "Default")
205+                storagegroup = tr("Default");
206+        else if (StorageGroup::kSpecialGroups.contains(storagegroup))
207+            storagegroup = tr(storagegroup.toLatin1().constData());
208+        m_storageGroupText->SetText(storagegroup);
209+    }
210+
211+    if (m_lastRecordedText)
212+    {
213+        QString tempDateTime = (pgRecInfo->last_record).toString(m_formatLongDate + ' ' + m_formatTime);
214+        m_lastRecordedText->SetText(tempDateTime);
215+    }
216+
217+    if (m_lastRecordedDateText)
218+    {
219+        QString tempDate = (pgRecInfo->last_record).toString(m_formatShortDate);
220+        m_lastRecordedDateText->SetText(tempDate);
221+    }
222+
223+    if (m_lastRecordedTimeText)
224+    {
225+        QString tempTime = (pgRecInfo->last_record).toString(m_formatTime);
226+        m_lastRecordedTimeText->SetText(tempTime);
227+    }
228+
229+    if (m_channameText)
230+    {
231+        QString channame = pgRecInfo->channame;
232+        if ((pgRecInfo->rectype == kAllRecord) ||
233+            (pgRecInfo->rectype == kFindOneRecord) ||
234+            (pgRecInfo->rectype == kFindDailyRecord) ||
235+            (pgRecInfo->rectype == kFindWeeklyRecord))
236+            channame = tr("Any");
237+        m_channameText->SetText(channame);
238+    }
239+
240+    if (m_channumText)
241+    {
242+        QString channum = pgRecInfo->chanstr;
243+        if ((pgRecInfo->rectype == kAllRecord) ||
244+            (pgRecInfo->rectype == kFindOneRecord) ||
245+            (pgRecInfo->rectype == kFindDailyRecord) ||
246+            (pgRecInfo->rectype == kFindWeeklyRecord))
247+            channum = tr("Any");
248+        m_channumText->SetText(channum);
249+    }
250+
251+    if (m_callsignText)
252+    {
253+        QString callsign = pgRecInfo->chansign;
254+        if ((pgRecInfo->rectype == kAllRecord) ||
255+            (pgRecInfo->rectype == kFindOneRecord) ||
256+            (pgRecInfo->rectype == kFindDailyRecord) ||
257+            (pgRecInfo->rectype == kFindWeeklyRecord))
258+            callsign = tr("Any");
259+        m_callsignText->SetText(callsign);
260+    }
261+
262+    if (m_recProfileText)
263+    {
264+        QString profile = pgRecInfo->profile;
265+        if ((profile == "Default") || (profile == "Live TV") ||
266+            (profile == "High Quality") || (profile == "Low Quality"))
267+            profile = tr(profile.toLatin1().constData());
268+        m_recProfileText->SetText(profile);
269+    }
270+
271 }
272 
273 void ProgramRecPriority::RemoveItemFromList(MythUIButtonListItem *item)
274Index: mythtv/programs/mythfrontend/programrecpriority.h
275===================================================================
276--- mythtv.orig/programs/mythfrontend/programrecpriority.h      2009-07-22 21:41:54.000000000 -0400
277+++ mythtv/programs/mythfrontend/programrecpriority.h   2009-07-22 21:53:23.000000000 -0400
278@@ -27,13 +27,14 @@
279     QDateTime last_record;
280     int avg_delay;
281     int autoRecPriority;
282+    QString profile;
283 };
284 
285 class ProgramRecPriority : public MythScreenType
286 {
287     Q_OBJECT
288   public:
289-    ProgramRecPriority(MythScreenStack *parent);
290+    ProgramRecPriority(MythScreenStack *parent, const QString &name);
291    ~ProgramRecPriority();
292 
293     bool Create(void);
294@@ -85,11 +86,26 @@
295 
296     MythUIButtonList *m_programList;
297 
298+    QString m_formatShortDate;
299+    QString m_formatLongDate;
300+    QString m_formatTime;
301+
302+    MythUIText *m_categoryText;
303+    MythUIText *m_descriptionText;
304     MythUIText *m_schedInfoText;
305     MythUIText *m_rectypePriorityText;
306     MythUIText *m_recPriorityText;
307     MythUIText *m_recPriorityBText;
308     MythUIText *m_finalPriorityText;
309+    MythUIText *m_recGroupText;
310+    MythUIText *m_storageGroupText;
311+    MythUIText *m_lastRecordedText;
312+    MythUIText *m_lastRecordedDateText;
313+    MythUIText *m_lastRecordedTimeText;
314+    MythUIText *m_channameText;
315+    MythUIText *m_channumText;
316+    MythUIText *m_callsignText;
317+    MythUIText *m_recProfileText;
318 
319     ProgramRecPriorityInfo *m_currentItem;
320 
321Index: mythtv/themes/default/schedule-ui.xml
322===================================================================
323--- mythtv.orig/themes/default/schedule-ui.xml  2009-07-22 21:41:54.000000000 -0400
324+++ mythtv/themes/default/schedule-ui.xml       2009-07-22 21:42:11.000000000 -0400
325@@ -811,6 +811,147 @@
326 
327     </window>
328 
329+    <window name="managerecrules">
330+
331+        <textarea name="pagetitle" from="basetextarea">
332+            <area>20,5,410,40</area>
333+            <font>baselarge</font>
334+            <value>Manage Recording Rules</value>
335+        </textarea>
336+
337+        <imagetype name="filler">
338+            <filename>rk-background.png</filename>
339+            <position>0,35</position>
340+        </imagetype>
341+
342+        <imagetype name="showinglines">
343+            <filename>rk-lines.png</filename>
344+            <position>0,35</position>
345+        </imagetype>
346+
347+        <textarea name="callsignlabel" from="basetextarea">
348+            <area>440,15,100,40</area>
349+            <value>Channel</value>
350+        </textarea>
351+
352+        <textarea name="lastrecordedlabel" from="basetextarea">
353+            <area>550,15,150,40</area>
354+            <value>Last Recorded</value>
355+            <align>right</align>
356+        </textarea>
357+
358+        <textarea name="prioritylabel" from="basetextarea">
359+            <area>710,15,95,40</area>
360+            <value>Priority</value>
361+        </textarea>
362+
363+        <buttonlist name="programs" from="basebuttonlist2">
364+            <area>20,59,760,370</area>
365+            <buttonarea>0,0,760,340</buttonarea>
366+            <statetype name="buttonitem">
367+                <state name="active">
368+                    <textarea name="rectype" from="buttontext">
369+                        <area>30,1,20,24</area>
370+                        <align>hcenter</align>
371+                    </textarea>
372+                    <textarea name="title" from="buttontext">
373+                        <area>60,1,350,24</area>
374+                    </textarea>
375+                    <textarea name="callsign" from="buttontext">
376+                        <area>420,1,100,24</area>
377+                    </textarea>
378+                    <textarea name="lastrecordeddate" from="buttontext">
379+                        <area>530,1,150,24</area>
380+                        <align>right</align>
381+                    </textarea>
382+                    <textarea name="finalpriority" from="buttontext">
383+                        <area>690,1,60,24</area>
384+                        <align>right</align>
385+                    </textarea>
386+                </state>
387+                <state name="selected" from="active" />
388+                <state name="inactive" from="active" />
389+            </statetype>
390+            <statetype name="upscrollarrow">
391+                <position>710,340</position>
392+            </statetype>
393+            <statetype name="downscrollarrow">
394+                <position>740,340</position>
395+            </statetype>
396+        </buttonlist>
397+
398+        <textarea name="title" from="basetextarea">
399+            <area>30,400,740,40</area>
400+            <font>basemedium</font>
401+        </textarea>
402+
403+        <textarea name="recordingtype" from="basetextarea">
404+            <area>30,440,430,30</area>
405+        </textarea>
406+
407+        <textarea name="scheduleinfo" from="basetextarea">
408+            <area>30,470,740,30</area>
409+        </textarea>
410+
411+        <textarea name="finalprioritylabel" from="basetextarea">
412+            <area>630,440,90,30</area>
413+            <value>Priority:</value>
414+            <align>right</align>
415+        </textarea>
416+
417+        <textarea name="finalpriority" from="basetextarea">
418+            <area>730,440,40,30</area>
419+            <align>right</align>
420+        </textarea>
421+
422+        <textarea name="recordinggrouplabel" from="basetextarea">
423+            <area>30,500,190,30</area>
424+            <value>Recording Group:</value>
425+            <align>right</align>
426+        </textarea>
427+
428+        <textarea name="recordinggroup" from="basetextarea">
429+            <area>230,500,160,30</area>
430+        </textarea>
431+
432+        <textarea name="categorylabel" from="basetextarea">
433+            <area>30,530,190,30</area>
434+            <value>Category:</value>
435+            <align>right</align>
436+        </textarea>
437+
438+        <textarea name="category" from="basetextarea">
439+            <area>230,530,160,30</area>
440+        </textarea>
441+
442+        <textarea name="storagegrouplabel" from="basetextarea">
443+            <area>400,500,190,30</area>
444+            <value>Storage Group:</value>
445+            <align>right</align>
446+        </textarea>
447+
448+        <textarea name="storagegroup" from="basetextarea">
449+            <area>600,500,160,30</area>
450+        </textarea>
451+
452+        <textarea name="recordingprofilelabel" from="basetextarea">
453+            <area>400,530,190,30</area>
454+            <value>Recording Profile:</value>
455+            <align>right</align>
456+        </textarea>
457+
458+        <textarea name="recordingprofile" from="basetextarea">
459+            <area>600,530,160,30</area>
460+        </textarea>
461+
462+        <textarea name="keyinstr">
463+            <area>0,570,800,30</area>
464+            <value>(1) Title (2) Priority (4) Type</value>
465+            <align>allcenter</align>
466+        </textarea>
467+
468+    </window>
469+
470     <window name="custompriority">
471 
472         <textarea name="pagetitle" from="basetextarea">
473Index: mythtv/themes/defaultmenu/manage_recordings.xml
474===================================================================
475--- mythtv.orig/themes/defaultmenu/manage_recordings.xml        2009-07-22 21:41:54.000000000 -0400
476+++ mythtv/themes/defaultmenu/manage_recordings.xml     2009-07-22 21:42:11.000000000 -0400
477@@ -33,28 +33,11 @@
478     </button>
479 
480     <button>
481-        <type>TV_RECPRIORITIES</type>
482-        <text>Set Priorities</text>
483-        <text lang="DE">PrioritÀten</text>
484-        <text lang="IS">Setja forgang</text>
485-        <text lang="FR">Fixer les priorités</text>
486-        <text lang="NL">Prioriteiten Instellen</text>
487-        <text lang="SV">Prioriteter</text>
488-        <text lang="JA">録画優先順䜍</text>
489-        <text lang="FI">Aseta Prioriteetteja</text>
490-        <text lang="ZH_TW">錄圱優先次序</text>
491-        <text lang="SL">Nastavitve prioritet</text>
492-        <text lang="ET">Prioriteetide muutmine</text>
493-        <text lang="NB">Velg prioriteringer</text>
494-        <text lang="DA">SÊt prioriteter</text>
495-        <text lang="ES">Fijar Prioridades</text>
496-        <text lang="PT">Definir Prioridades</text>
497-        <text lang="CS">Nastavit priority</text>
498-        <text lang="RU">УстаМПвка прОПрОтетПв</text>
499-        <text lang="PL">Ustaw priorytety</text>
500-        <text lang="HE">הגדךת קדימויות</text>
501-        <description>Prioritize some shows over others</description>
502-        <action>TV_SET_RECPRIORITIES</action>
503+        <type>TV_RECORDING_RULES</type>
504+        <text>Recording Rules</text>
505+        <alttext>Manage Rules</alttext>
506+        <description>Edit or delete any recording rule</description>
507+        <action>TV_MANAGE_RECORDING_RULES</action>
508     </button>
509 
510     <button>
511@@ -143,4 +126,29 @@
512         <action>TV_PREVIOUS</action>
513     </button>
514 
515+    <button>
516+        <type>TV_RECPRIORITIES</type>
517+        <text>Set Priorities</text>
518+        <text lang="DE">PrioritÀten</text>
519+        <text lang="IS">Setja forgang</text>
520+        <text lang="FR">Fixer les priorités</text>
521+        <text lang="NL">Prioriteiten Instellen</text>
522+        <text lang="SV">Prioriteter</text>
523+        <text lang="JA">録画優先順䜍</text>
524+        <text lang="FI">Aseta Prioriteetteja</text>
525+        <text lang="ZH_TW">錄圱優先次序</text>
526+        <text lang="SL">Nastavitve prioritet</text>
527+        <text lang="ET">Prioriteetide muutmine</text>
528+        <text lang="NB">Velg prioriteringer</text>
529+        <text lang="DA">SÊt prioriteter</text>
530+        <text lang="ES">Fijar Prioridades</text>
531+        <text lang="PT">Definir Prioridades</text>
532+        <text lang="CS">Nastavit priority</text>
533+        <text lang="RU">УстаМПвка прОПрОтетПв</text>
534+        <text lang="PL">Ustaw priorytety</text>
535+        <text lang="HE">הגדךת קדימויות</text>
536+        <description>Prioritize some shows over others</description>
537+        <action>TV_SET_RECPRIORITIES</action>
538+    </button>
539+
540 </mythmenu>
541Index: mythtv/programs/mythfrontend/main.cpp
542===================================================================
543--- mythtv.orig/programs/mythfrontend/main.cpp  2009-07-22 21:41:54.000000000 -0400
544+++ mythtv/programs/mythfrontend/main.cpp       2009-07-22 21:53:58.000000000 -0400
545@@ -286,7 +286,21 @@
546 {
547     MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
548 
549-    ProgramRecPriority *progRecPrior = new ProgramRecPriority(mainStack);
550+    ProgramRecPriority *progRecPrior = new ProgramRecPriority(mainStack,
551+                                                        "ProgramRecPriority");
552+
553+    if (progRecPrior->Create())
554+        mainStack->AddScreen(progRecPrior);
555+    else
556+        delete progRecPrior;
557+}
558+
559+void startManageRecordingRules(void)
560+{
561+    MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
562+
563+    ProgramRecPriority *progRecPrior = new ProgramRecPriority(mainStack,
564+                                                            "ManageRecRules");
565 
566     if (progRecPrior->Create())
567         mainStack->AddScreen(progRecPrior);
568@@ -439,6 +453,8 @@
569         startManaged();
570     else if (sel == "tv_set_recpriorities")
571         startProgramRecPriorities();
572+    else if (sel == "tv_manage_recording_rules")
573+        startManageRecordingRules();
574     else if (sel == "tv_progfind")
575         startFinder();
576     else if (sel == "tv_search_title")
577@@ -871,6 +887,7 @@
578     REG_JUMPLOC("Manage Recordings / Fix Conflicts", "", "",
579                 startManaged, "VIEWSCHEDULED");
580     REG_JUMP("Program Recording Priorities", "", "", startProgramRecPriorities);
581+    REG_JUMP("Manage Recording Rules", "", "", startManageRecordingRules);
582     REG_JUMP("Channel Recording Priorities", "", "", startChannelRecPriorities);
583     REG_JUMP("TV Recording Playback", "", "", startPlayback);
584     REG_JUMP("TV Recording Deletion", "", "", startDelete);
585Index: mythtv/themes/classic/tv_schedule.xml
586===================================================================
587--- mythtv.orig/themes/classic/tv_schedule.xml  2009-07-22 21:41:54.000000000 -0400
588+++ mythtv/themes/classic/tv_schedule.xml       2009-07-22 21:42:11.000000000 -0400
589@@ -170,6 +170,42 @@
590     </button>
591 
592     <button>
593+        <type>TV_RECORDING_RULES</type>
594+        <text>Recording Rules</text>
595+        <alttext>Manage Rules</alttext>
596+        <description>Edit or delete any recording rule</description>
597+        <action>TV_MANAGE_RECORDING_RULES</action>
598+    </button>
599+
600+    <button>
601+        <type>TV_CONFLICTS</type>
602+        <text>Upcoming Recordings</text>
603+        <text lang="IT">Correggi i conflitti</text>
604+        <text lang="ES">Resolver conflictos</text>
605+        <text lang="CA">Resoldre Conflictes</text>
606+        <text lang="NL">Geplande Opnames</text>
607+        <text lang="FR">Gestion des conflits</text>
608+        <text lang="DE">Aufnahmeplan</text>
609+        <text lang="DA">LÞs konflikter</text>
610+        <text lang="PT">Resolver Conflitos</text>
611+        <text lang="SV">Kommande inspelningar</text>
612+        <text lang="JA">これからの録画</text>
613+        <text lang="FI">Tulevat Nauhoitukset</text>
614+        <text lang="ZH_TW">修正預蚭錄圱衝突</text>
615+        <text lang="SL">Prihajajoča snemanja</text>
616+        <text lang="ET">Tulevased salvestamised</text>
617+        <text lang="RU">БуЎущОе запОсО</text>
618+        <text lang="PL">RozwiÄ…ÅŒ konflikty</text>
619+        <text lang="HE">ההקלטות הבאות</text>
620+        <alttext lang="SV">Kommande</alttext>
621+        <alttext lang="ET">Tulevased</alttext>
622+        <alttext lang="ES">Conflictos</alttext>
623+        <alttext lang="PL">Konflikty</alttext>
624+        <description>VCR-like recording scheduler</description>
625+        <action>TV_FIX_CONFLICTS</action>
626+    </button>
627+
628+    <button>
629         <type>TV_RECPRIORITIES</type>
630         <text>Recording Priorities</text>
631         <text lang="IT">Priorità Registrazioni</text>
632@@ -201,32 +237,4 @@
633         <action>TV_SET_RECPRIORITIES</action>
634     </button>
635 
636-    <button>
637-        <type>TV_CONFLICTS</type>
638-        <text>Upcoming Recordings</text>
639-        <text lang="IT">Correggi i conflitti</text>
640-        <text lang="ES">Resolver conflictos</text>
641-        <text lang="CA">Resoldre Conflictes</text>
642-        <text lang="NL">Geplande Opnames</text>
643-        <text lang="FR">Gestion des conflits</text>
644-        <text lang="DE">Aufnahmeplan</text>
645-        <text lang="DA">LÞs konflikter</text>
646-        <text lang="PT">Resolver Conflitos</text>
647-        <text lang="SV">Kommande inspelningar</text>
648-        <text lang="JA">これからの録画</text>
649-        <text lang="FI">Tulevat Nauhoitukset</text>
650-        <text lang="ZH_TW">修正預蚭錄圱衝突</text>
651-        <text lang="SL">Prihajajoča snemanja</text>
652-        <text lang="ET">Tulevased salvestamised</text>
653-        <text lang="RU">БуЎущОе запОсО</text>
654-        <text lang="PL">RozwiÄ…ÅŒ konflikty</text>
655-        <text lang="HE">ההקלטות הבאות</text>
656-        <alttext lang="SV">Kommande</alttext>
657-        <alttext lang="ET">Tulevased</alttext>
658-        <alttext lang="ES">Conflictos</alttext>
659-        <alttext lang="PL">Konflikty</alttext>
660-        <description>See what will be recorded next</description>
661-        <action>TV_FIX_CONFLICTS</action>
662-    </button>
663-
664 </mythmenu>
665Index: mythtv/themes/default-wide/schedule-ui.xml
666===================================================================
667--- mythtv.orig/themes/default-wide/schedule-ui.xml     2009-07-22 21:41:54.000000000 -0400
668+++ mythtv/themes/default-wide/schedule-ui.xml  2009-07-22 21:42:11.000000000 -0400
669@@ -1400,4 +1400,136 @@
670 
671     </window>
672 
673+    <window name="managerecrules">
674+
675+        <textarea name="pagetitle" from="basetextarea">
676+            <area>20,5,650,40</area>
677+            <font>baselarge</font>
678+            <value>Manage Recording Rules</value>
679+        </textarea>
680+
681+        <imagetype name="filler">
682+            <filename>cr-background.png</filename>
683+            <area>0,39,1280,420</area>
684+        </imagetype>
685+
686+        <textarea name="callsignlabel" from="basetextarea">
687+            <area>680,15,100,40</area>
688+            <value>Channel</value>
689+            <align>right</align>
690+        </textarea>
691+        <textarea name="lastrecordedlabel" from="basetextarea">
692+            <area>790,15,290,40</area>
693+            <value>Last Recorded</value>
694+            <align>right</align>
695+        </textarea>
696+
697+        <textarea name="prioritylabel" from="basetextarea">
698+            <area>1090,15,95,40</area>
699+            <value>Priority</value>
700+            <align>right</align>
701+        </textarea>
702+
703+        <buttonlist name="programs" from="basebuttonlist2">
704+            <area>20,59,760,370</area>
705+            <buttonarea>0,0,760,340</buttonarea>
706+            <statetype name="buttonitem">
707+                <state name="active">
708+                    <textarea name="rectype" from="buttontext">
709+                        <area>30,1,20,24</area>
710+                        <align>hcenter</align>
711+                    </textarea>
712+                    <textarea name="title" from="buttontext">
713+                        <area>60,1,590,24</area>
714+                    </textarea>
715+                    <textarea name="callsign" from="buttontext">
716+                        <area>660,1,100,24</area>
717+                        <align>right</align>
718+                    </textarea>
719+                    <textarea name="lastrecorded" from="buttontext">
720+                        <area>770,1,290,24</area>
721+                        <align>right</align>
722+                    </textarea>
723+                    <textarea name="finalpriority" from="buttontext">
724+                        <area>1130,1,40,24</area>
725+                        <align>right</align>
726+                    </textarea>
727+                </state>
728+                <state name="selected" from="active" />
729+                <state name="inactive" from="active" />
730+            </statetype>
731+        </buttonlist>
732+
733+        <textarea name="title" from="basetextarea">
734+            <area>30,450,740,40</area>
735+            <font>basemedium</font>
736+        </textarea>
737+
738+        <textarea name="recordingtype" from="basetextarea">
739+            <area>30,490,430,30</area>
740+        </textarea>
741+
742+        <textarea name="scheduleinfo" from="basetextarea">
743+            <area>30,520,740,30</area>
744+        </textarea>
745+
746+        <textarea name="finalprioritylabel" from="basetextarea">
747+            <area>1110,490,90,30</area>
748+            <value>Priority:</value>
749+            <align>right</align>
750+        </textarea>
751+
752+        <textarea name="finalpriority" from="basetextarea">
753+            <area>1210,490,40,30</area>
754+            <align>right</align>
755+        </textarea>
756+
757+        <textarea name="recordinggrouplabel" from="basetextarea">
758+            <area>30,550,190,30</area>
759+            <value>Recording Group:</value>
760+            <align>right</align>
761+        </textarea>
762+
763+        <textarea name="recordinggroup" from="basetextarea">
764+            <area>230,550,160,30</area>
765+        </textarea>
766+
767+        <textarea name="categorylabel" from="basetextarea">
768+            <area>30,580,190,30</area>
769+            <value>Category:</value>
770+            <align>right</align>
771+        </textarea>
772+
773+        <textarea name="category" from="basetextarea">
774+            <area>230,580,160,30</area>
775+        </textarea>
776+
777+        <textarea name="storagegrouplabel" from="basetextarea">
778+            <area>640,550,190,30</area>
779+            <value>Storage Group:</value>
780+            <align>right</align>
781+        </textarea>
782+
783+        <textarea name="storagegroup" from="basetextarea">
784+            <area>840,550,160,30</area>
785+        </textarea>
786+
787+        <textarea name="recordingprofilelabel" from="basetextarea">
788+            <area>640,580,190,30</area>
789+            <value>Recording Profile:</value>
790+            <align>right</align>
791+        </textarea>
792+
793+        <textarea name="recordingprofile" from="basetextarea">
794+            <area>840,580,160,30</area>
795+        </textarea>
796+
797+        <textarea name="keyinstr">
798+            <area>0,660,1280,30</area>
799+            <value>(1) Title (2) Priority (4) Type</value>
800+            <align>allcenter</align>
801+        </textarea>
802+
803+    </window>
804+
805 </mythuitheme>