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

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

Updated for recent changes in trunk

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