The Winamp Remote Control suite
a remote control client and plugin for Winamp 2.x, 5.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ClientConfig.cpp
Go to the documentation of this file.
1 /*
2  * ClientConfig.cpp
3  *
4  * Created on: 28 Jul 2013
5  * Author: Patrick
6  */
7 
8 #include <memory>
9 #include <registry.hpp>
10 
11 #include "ClientConfig.h"
12 
13 const char * sRegKey = "software\\PMMSoft\\Winamp controller\\client settings";
14 const char * sCommandsLeft = "Commands Left";
15 const char * sCommandsTop = "Commands Top";
16 const char * sCommandsVisible = "Commands Visible";
17 const char * sVolumeLeft = "Volume Left";
18 const char * sVolumeTop = "Volume Top";
19 const char * sVolumeVisible = "Volume Visible";
20 const char * sPlaylistLeft = "Playlist Left";
21 const char * sPlaylistTop = "Playlist Top";
22 const char * sPlaylistWidth = "Playlist Width";
23 const char * sPlaylistHeight = "Playlist Height";
24 const char * sPlaylistVisible = "Playlist Visible";
25 
26 const char * sEndpoint = "Endpoint";
27 const char * sAddress = "Address";
28 
29 const char * sEndPointDefault = "\\pipe\\winampremote";
30 const char * sAddressDefault = "localhost";
31 
32 const char * sAutoHide = "AutoHide";
33 const char * sAutoRestore = "AutoRestore";
34 
35 const char * sPlaylistUpdate = "Playlist Update";
36 
37 const char * sVisible = "Visible";
38 
39 const char * sPollInterval = "Poll Interval";
40 
41 const char * sTrue = "true";
42 const char * sFalse = "false";
43 
44 namespace WinampRemote
45 {
46 namespace Config
47 {
48 
49 
51 {
52 
53  std::auto_ptr < TRegistry > reg(new TRegistry());
54 
55  reg->OpenKey(sRegKey, true);
56 
57  m_endpoint = reg->ReadString(sEndpoint).c_str();
58  m_address = reg->ReadString(sAddress).c_str();
59 
60  if (m_endpoint == "")
61  m_endpoint = sEndPointDefault;
62  if (m_address == "")
63  m_address = sAddressDefault;
64 
65  m_autohide = !(reg->ReadString(sAutoHide).LowerCase() == sFalse);
66 
67  m_autorestore = !(reg->ReadString(sAutoRestore).LowerCase() == sFalse);
68 
69 
70  if (reg->ReadString(sPlaylistUpdate).LowerCase() == "every song")
71  m_updatePerSong = true;
72 
73  m_visible = (reg->ReadString("Visible").LowerCase() == sFalse);
74 
75  m_pollInterval = reg->ReadString("Poll Interval").ToIntDef(1);
76 
77 
78 }
79 
80 
81 void ClientConfig::write(const TForm * const frmCommands,
82  const TForm * const frmPlaylist,
83  const TForm * const frmSettings) const
84 {
85 
86  std::auto_ptr < TRegistry > reg(new TRegistry());
87 
88  reg->OpenKey(sRegKey, true);
89 
90  if (m_endpoint != "")
91  reg->WriteString(sEndpoint, m_endpoint.c_str());
92  if (m_address != "")
93  reg->WriteString(sAddress, m_address.c_str());
94 
95  reg->WriteString(sVisible, m_visible?sTrue:sFalse);
96 
97  reg->WriteString("Poll Interval", AnsiString(m_pollInterval));
98  reg->WriteString("AutoHide", (m_autohide)?sTrue:sFalse);
99  reg->WriteString("AutoRestore", (m_autorestore)?sTrue:sFalse);
100 
101  if (m_updatePerSong)
102  {
103  reg->WriteString("Playlist Update", "every song");
104  }
105  else
106  {
107  reg->WriteString("Playlist Update", "playlist change");
108  }
109 
110  // only save settings if check box checked, to prevent overwriting with defaults
111  if (m_autorestore){
112  reg->WriteString("Commands Left", AnsiString(frmCommands->Left));
113  reg->WriteString("Commands Top", AnsiString(frmCommands->Top));
114  reg->WriteString("Commands Visible", frmCommands->Visible?sTrue:sFalse);
115  reg->WriteString("Commands Docked", frmCommands->HostDockSite?sTrue:sFalse);
116 
117  reg->WriteString("Playlist Left", AnsiString(frmPlaylist->Left));
118  reg->WriteString("Playlist Top", AnsiString(frmPlaylist->Top));
119  reg->WriteString("Playlist Width", AnsiString(frmPlaylist->Width));
120  reg->WriteString("Playlist Height", AnsiString(frmPlaylist->Height));
121  reg->WriteString("Playlist Visible", frmPlaylist->Visible?sTrue:sFalse);
122 
123  reg->WriteString("Volume Left", AnsiString(frmSettings->Left));
124  reg->WriteString("Volume Top", AnsiString(frmSettings->Top));
125  reg->WriteString("Volume Visible", frmSettings->Visible?sTrue:sFalse);
126  }
127 
128 }
129 
130 } /* namespace Config */
131 } /* namespace WinampRemote */