SASC
DVBSoftCAM

menuitems.cpp

Go to the documentation of this file.
00001 /*
00002  * menuitems.c: General purpose menu items
00003  *
00004  * See the main source file 'vdr.c' for copyright information and
00005  * how to reach the author.
00006  *
00007  * $Id: menuitems.c 1.19 2004/06/19 09:45:45 kls Exp $
00008  */
00009 
00010 #include "include/vdr/menuitems.h"
00011 #include <ctype.h>
00012 #include "include/vdr/plugin.h"
00013 #include "include/vdr/remote.h"
00014 #include "include/vdr/skins.h"
00015 #include "include/vdr/status.h"
00016 
00017 const char *FileNameChars = " abcdefghijklmnopqrstuvwxyz0123456789-.#~";
00018 
00019 // --- cMenuEditItem ---------------------------------------------------------
00020 
00021 cMenuEditItem::cMenuEditItem(const char *Name)
00022 {
00023   name = strdup(Name ? Name : "???");
00024 }
00025 
00026 cMenuEditItem::~cMenuEditItem()
00027 {
00028   free(name);
00029 }
00030 
00031 void cMenuEditItem::SetValue(const char *Value)
00032 {
00033   char *buffer = NULL;
00034   asprintf(&buffer, "%s:\t%s", name, Value);
00035   SetText(buffer, false);
00036 }
00037 
00038 // --- cMenuEditIntItem ------------------------------------------------------
00039 
00040 cMenuEditIntItem::cMenuEditIntItem(const char *Name, int *Value, int Min, int Max, const char *MinString, const char *MaxString)
00041 :cMenuEditItem(Name)
00042 {
00043   value = Value;
00044   min = Min;
00045   max = Max;
00046   minString = MinString;
00047   maxString = MaxString;
00048   if (*value < min)
00049      *value = min;
00050   else if (*value > max)
00051      *value = max;
00052   Set();
00053 }
00054 
00055 void cMenuEditIntItem::Set(void)
00056 {
00057   if (minString && *value == min)
00058      SetValue(minString);
00059   else if (maxString && *value == max)
00060      SetValue(maxString);
00061   else {
00062      char buf[16];
00063      snprintf(buf, sizeof(buf), "%d", *value);
00064      SetValue(buf);
00065      }
00066 }
00067 
00068 eOSState cMenuEditIntItem::ProcessKey(eKeys Key)
00069 {
00070   eOSState state = cMenuEditItem::ProcessKey(Key);
00071 
00072   if (state == osUnknown) {
00073      int newValue = *value;
00074      Key = NORMALKEY(Key);
00075      switch (Key) {
00076        case kNone: break;
00077        case k0 ... k9:
00078             if (fresh) {
00079                *value = 0;
00080                fresh = false;
00081                }
00082             newValue = *value * 10 + (Key - k0);
00083             break;
00084        case kLeft: // TODO might want to increase the delta if repeated quickly?
00085             newValue = *value - 1;
00086             fresh = true;
00087             break;
00088        case kRight:
00089             newValue = *value + 1;
00090             fresh = true;
00091             break;
00092        default:
00093             if (*value < min) { *value = min; Set(); }
00094             if (*value > max) { *value = max; Set(); }
00095             return state;
00096        }
00097      if ((!fresh || min <= newValue) && newValue <= max) {
00098         *value = newValue;
00099         Set();
00100         }
00101      state = osContinue;
00102      }
00103   return state;
00104 }
00105 
00106 // --- cMenuEditBoolItem -----------------------------------------------------
00107 
00108 cMenuEditBoolItem::cMenuEditBoolItem(const char *Name, int *Value, const char *FalseString, const char *TrueString)
00109 :cMenuEditIntItem(Name, Value, 0, 1)
00110 {
00111   falseString = FalseString ? FalseString : tr("no");
00112   trueString = TrueString ? TrueString : tr("yes");
00113   Set();
00114 }
00115 
00116 void cMenuEditBoolItem::Set(void)
00117 {
00118   char buf[16];
00119   snprintf(buf, sizeof(buf), "%s", *value ? trueString : falseString);
00120   SetValue(buf);
00121 }
00122 
00123 // --- cMenuEditBitItem ------------------------------------------------------
00124 
00125 cMenuEditBitItem::cMenuEditBitItem(const char *Name, uint *Value, uint Mask, const char *FalseString, const char *TrueString)
00126 :cMenuEditBoolItem(Name, &bit, FalseString, TrueString)
00127 {
00128   value = Value;
00129   bit = (*value & Mask) != 0;
00130   mask = Mask;
00131   Set();
00132 }
00133 
00134 void cMenuEditBitItem::Set(void)
00135 {
00136   *value = bit ? *value | mask : *value & ~mask;
00137   cMenuEditBoolItem::Set();
00138 }
00139 
00140 // --- cMenuEditNumItem ------------------------------------------------------
00141 
00142 cMenuEditNumItem::cMenuEditNumItem(const char *Name, char *Value, int Length, bool Blind)
00143 :cMenuEditItem(Name)
00144 {
00145   value = Value;
00146   length = Length;
00147   blind = Blind;
00148   Set();
00149 }
00150 
00151 void cMenuEditNumItem::Set(void)
00152 {
00153   if (blind) {
00154      char buf[length + 1];
00155      int i;
00156      for (i = 0; i < length && value[i]; i++)
00157          buf[i] = '*';
00158      buf[i] = 0;
00159      SetValue(buf);
00160      }
00161   else
00162      SetValue(value);
00163 }
00164 
00165 eOSState cMenuEditNumItem::ProcessKey(eKeys Key)
00166 {
00167   eOSState state = cMenuEditItem::ProcessKey(Key);
00168 
00169   if (state == osUnknown) {
00170      Key = NORMALKEY(Key);
00171      switch (Key) {
00172        case kLeft: {
00173             int l = strlen(value);
00174             if (l > 0)
00175                value[l - 1] = 0;
00176             }
00177             break;
00178        case k0 ... k9: {
00179             int l = strlen(value);
00180             if (l < length) {
00181                value[l] = Key - k0 + '0';
00182                value[l + 1] = 0;
00183                }
00184             }
00185             break;
00186        default: return state;
00187        }
00188      Set();
00189      state = osContinue;
00190      }
00191   return state;
00192 }
00193 
00194 // --- cMenuEditChrItem ------------------------------------------------------
00195 
00196 cMenuEditChrItem::cMenuEditChrItem(const char *Name, char *Value, const char *Allowed)
00197 :cMenuEditItem(Name)
00198 {
00199   value = Value;
00200   allowed = strdup(Allowed);
00201   current = strchr(allowed, *Value);
00202   if (!current)
00203      current = allowed;
00204   Set();
00205 }
00206 
00207 cMenuEditChrItem::~cMenuEditChrItem()
00208 {
00209   free(allowed);
00210 }
00211 
00212 void cMenuEditChrItem::Set(void)
00213 {
00214   char buf[2];
00215   snprintf(buf, sizeof(buf), "%c", *value);
00216   SetValue(buf);
00217 }
00218 
00219 eOSState cMenuEditChrItem::ProcessKey(eKeys Key)
00220 {
00221   return osContinue;
00222 }
00223 
00224 // --- cMenuEditStrItem ------------------------------------------------------
00225 
00226 cMenuEditStrItem::cMenuEditStrItem(const char *Name, char *Value, int Length, const char *Allowed)
00227 :cMenuEditItem(Name)
00228 {
00229 }
00230 
00231 cMenuEditStrItem::~cMenuEditStrItem()
00232 {
00233 }
00234 
00235 void cMenuEditStrItem::SetHelpKeys(void)
00236 {
00237 }
00238 
00239 void cMenuEditStrItem::Set(void)
00240 {
00241 }
00242 
00243 uint cMenuEditStrItem::Inc(uint c, bool Up)
00244 {
00245   return '\0';
00246 }
00247 
00248 eOSState cMenuEditStrItem::ProcessKey(eKeys Key)
00249 {
00250   return osContinue;
00251 }
00252 
00253 // --- cMenuEditStraItem -----------------------------------------------------
00254 
00255 cMenuEditStraItem::cMenuEditStraItem(const char *Name, int *Value, int NumStrings, const char * const *Strings)
00256 :cMenuEditIntItem(Name, Value, 0, NumStrings - 1)
00257 {
00258 }
00259 
00260 void cMenuEditStraItem::Set(void)
00261 {
00262 }
00263 
00264 // --- cMenuEditChanItem -----------------------------------------------------
00265 
00266 cMenuEditChanItem::cMenuEditChanItem(const char *Name, int *Value, const char *NoneString)
00267 :cMenuEditIntItem(Name, Value, NoneString ? 0 : 1, Channels.MaxNumber())
00268 {
00269   noneString = NoneString;
00270   Set();
00271 }
00272 
00273 void cMenuEditChanItem::Set(void)
00274 {
00275 }
00276 
00277 eOSState cMenuEditChanItem::ProcessKey(eKeys Key)
00278 {
00279   return osContinue;
00280 }
00281 
00282 // --- cMenuEditTranItem -----------------------------------------------------
00283 
00284 cMenuEditTranItem::cMenuEditTranItem(const char *Name, int *Value, int *Source)
00285 :cMenuEditChanItem(Name, Value)
00286 {
00287 }
00288 
00289 eOSState cMenuEditTranItem::ProcessKey(eKeys Key)
00290 {
00291   return osContinue;
00292 }
00293 
00294 // --- cMenuEditDateItem -----------------------------------------------------
00295 
00296 cMenuEditDateItem::cMenuEditDateItem(const char *Name, time_t *Value, int *WeekDays)
00297 :cMenuEditItem(Name)
00298 {
00299 }
00300 
00301 void cMenuEditDateItem::Set(void)
00302 {
00303 }
00304 
00305 eOSState cMenuEditDateItem::ProcessKey(eKeys Key)
00306 {
00307   return osContinue;
00308 }
00309 
00310 // --- cMenuEditTimeItem -----------------------------------------------------
00311 
00312 cMenuEditTimeItem::cMenuEditTimeItem(const char *Name, int *Value)
00313 :cMenuEditItem(Name)
00314 {
00315 }
00316 
00317 void cMenuEditTimeItem::Set(void)
00318 {
00319 }
00320 
00321 eOSState cMenuEditTimeItem::ProcessKey(eKeys Key)
00322 {
00323   return osContinue;
00324 }
00325 
00326 // --- cMenuSetupPage --------------------------------------------------------
00327 
00328 cMenuSetupPage::cMenuSetupPage(void)
00329 :cOsdMenu("", 33)
00330 {
00331   plugin = NULL;
00332 }
00333 
00334 void cMenuSetupPage::SetSection(const char *Section)
00335 {
00336 }
00337 
00338 eOSState cMenuSetupPage::ProcessKey(eKeys Key)
00339 {
00340   return osContinue;
00341 }
00342 
00343 void cMenuSetupPage::SetPlugin(cPlugin *Plugin)
00344 {
00345 }
00346 
00347 void cMenuSetupPage::SetupStore(const char *Name, const char *Value)
00348 {
00349 }
00350 
00351 void cMenuSetupPage::SetupStore(const char *Name, int Value)
00352 {
00353 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines