00001
00002
00003
00004
00005 #include "description.hh"
00006 #include "Text.hh"
00007
00008
00009 void Description::print(int n, ostream& fout)
00010 {
00011 list<string>::iterator s;
00012 list<int>::iterator t;
00013
00014 tab(n,fout); fout << "<faust>";
00015
00016 tab(n+1,fout); fout << "<name> " << fName << " </name>";
00017 tab(n+1,fout); fout << "<author> " << fAuthor << " </author>";
00018 tab(n+1,fout); fout << "<copyright> " << fCopyright << " </copyright>";
00019 tab(n+1,fout); fout << "<license> " << fLicense << " </license>";
00020 tab(n+1,fout); fout << "<version> " << fVersion << " </version>";
00021 tab(n+1,fout); fout << "<inputs> " << fInputs << " </inputs>";
00022 tab(n+1,fout); fout << "<outputs> " << fOutputs << " </outputs>";
00023
00024 tab(n+1,fout); fout << "<ui> ";
00025
00026
00027 tab(n+2,fout); fout << "<activewidgets>";
00028 tab(n+3,fout); fout << "<count> " << fActiveWidgetCount << " </count>";
00029 for (s = fActiveLines.begin(); s != fActiveLines.end(); s++) {
00030 tab(n+3, fout); fout << *s;
00031 }
00032 tab(n+2,fout); fout << "</activewidgets>";
00033
00034 tab(n+2,fout);
00035
00036
00037 tab(n+2,fout); fout << "<passivewidgets>";
00038 tab(n+3,fout); fout << "<count> " << fPassiveWidgetCount << " </count>";
00039 for (s = fPassiveLines.begin(); s != fPassiveLines.end(); s++) {
00040 tab(n+3, fout); fout << *s;
00041 }
00042 tab(n+2,fout); fout << "</passivewidgets>";
00043
00044
00045 tab(n+2,fout);
00046
00047
00048 tab(n+2,fout); fout << "<layout>";
00049 for ( t = fLayoutTabs.begin(), s = fLayoutLines.begin();
00050 s != fLayoutLines.end(); t++, s++) {
00051 tab(n+3+*t, fout); fout << *s;
00052 }
00053 tab(n+2,fout); fout << "</layout>";
00054
00055 tab(n+1,fout); fout << "</ui> ";
00056
00057
00058 tab(n,fout); fout << "</faust>" << endl;
00059
00060 }
00061
00062 void Description::ui(Tree t)
00063 {
00064 addGroup(0,t);
00065 }
00066
00067
00068 void Description::addGroup(int level, Tree t)
00069 {
00070 Tree label, elements, varname, sig;
00071 const char* groupnames[] = {"vgroup", "hgroup", "tgroup"};
00072
00073 if (isUiFolder(t, label, elements)) {
00074
00075 const int orient = tree2int(left(label));
00076 const char * str = tree2str(right(label));
00077
00078 addLayoutLine(level, subst("<group type=\"$0\">", groupnames[orient]));
00079 addLayoutLine(level+1, subst("<label> $0 </label>", str));
00080 while (!isNil(elements)) {
00081 addGroup(level+1, right(hd(elements)));
00082 elements = tl(elements);
00083 }
00084 addLayoutLine(level, "</group>");
00085
00086 } else if (isUiWidget(t, label, varname, sig)) {
00087
00088 int w = addWidget(label, varname, sig);
00089 addLayoutLine(level, subst("<widgetref id=\"$0\" />", T(w)));
00090
00091 } else {
00092
00093 fprintf(stderr, "error in user interface generation 2\n");
00094 exit(1);
00095
00096 }
00097 }
00098
00099 void Description::tab (int n, ostream& fout)
00100 {
00101 fout << '\n';
00102 while (n--) fout << '\t';
00103 }
00104
00105 int Description::addWidget(Tree label, Tree varname, Tree sig)
00106 {
00107 Tree path, c, x, y, z;
00108
00109
00110
00111 if ( isSigButton(sig, path) ) {
00112
00113 fWidgetID++;
00114 fActiveWidgetCount++;
00115 addActiveLine(subst("<widget type=\"button\" id=\"$0\">", T(fWidgetID)));
00116 addActiveLine(subst("\t<label> $0 </label>", tree2str(label)));
00117 addActiveLine(subst("\t<var> $0 </var>", tree2str(varname)));
00118 addActiveLine("</widget>");
00119
00120 } else if ( isSigCheckbox(sig, path) ) {
00121
00122 fWidgetID++;
00123 fActiveWidgetCount++;
00124 addActiveLine(subst("<widget type=\"checkbox\" id=\"$0\">", T(fWidgetID)));
00125 addActiveLine(subst("\t<label> $0 </label>", tree2str(label)));
00126 addActiveLine(subst("\t<var> $0 </var>", tree2str(varname)));
00127 addActiveLine("</widget>");
00128
00129 } else if ( isSigVSlider(sig, path,c,x,y,z) ) {
00130
00131 fWidgetID++;
00132 fActiveWidgetCount++;
00133 addActiveLine(subst("<widget type=\"vslider\" id=\"$0\">", T(fWidgetID)));
00134 addActiveLine(subst("\t<label> $0 </label>", tree2str(label)));
00135 addActiveLine(subst("\t<varname> $0 </varname>", tree2str(varname)));
00136 addActiveLine(subst("\t<init> $0 </init>", T(tree2float(c))));
00137 addActiveLine(subst("\t<min> $0 </min>", T(tree2float(x))));
00138 addActiveLine(subst("\t<max> $0 </max>", T(tree2float(y))));
00139 addActiveLine(subst("\t<step> $0 </step>", T(tree2float(z))));
00140 addActiveLine("</widget>");
00141
00142 } else if ( isSigHSlider(sig, path,c,x,y,z) ) {
00143
00144 fWidgetID++;
00145 fActiveWidgetCount++;
00146 addActiveLine(subst("<widget type=\"hslider\" id=\"$0\">", T(fWidgetID)));
00147 addActiveLine(subst("\t<label> $0 </label>", tree2str(label)));
00148 addActiveLine(subst("\t<varname> $0 </varname>", tree2str(varname)));
00149 addActiveLine(subst("\t<init> $0 </init>", T(tree2float(c))));
00150 addActiveLine(subst("\t<min> $0 </min>", T(tree2float(x))));
00151 addActiveLine(subst("\t<max> $0 </max>", T(tree2float(y))));
00152 addActiveLine(subst("\t<step> $0 </step>", T(tree2float(z))));
00153 addActiveLine("</widget>");
00154
00155 } else if ( isSigNumEntry(sig, path,c,x,y,z) ) {
00156
00157 fWidgetID++;
00158 fActiveWidgetCount++;
00159 addActiveLine(subst("<widget type=\"nentry\" id=\"$0\">", T(fWidgetID)));
00160 addActiveLine(subst("\t<label> $0 </label>", tree2str(label)));
00161 addActiveLine(subst("\t<varname> $0 </varname>", tree2str(varname)));
00162 addActiveLine(subst("\t<init> $0 </init>", T(tree2float(c))));
00163 addActiveLine(subst("\t<min> $0 </min>", T(tree2float(x))));
00164 addActiveLine(subst("\t<max> $0 </max>", T(tree2float(y))));
00165 addActiveLine(subst("\t<step> $0 </step>", T(tree2float(z))));
00166 addActiveLine("</widget>");
00167
00168
00169
00170
00171 } else if ( isSigVBargraph(sig,path,x,y,z) ) {
00172
00173 fWidgetID++;
00174 fPassiveWidgetCount++;
00175 addPassiveLine(subst("<widget type=\"vbargraph\" id=\"$0\">", T(fWidgetID)));
00176 addPassiveLine(subst("\t<label> $0 </label>", tree2str(label)));
00177 addPassiveLine(subst("\t<varname> $0 </varname>", tree2str(varname)));
00178 addPassiveLine(subst("\t<min> $0 </min>", T(tree2float(x))));
00179 addPassiveLine(subst("\t<max> $0 </max>", T(tree2float(y))));
00180 addPassiveLine("</widget>");
00181
00182 } else if ( isSigHBargraph(sig,path,x,y,z) ) {
00183
00184 fWidgetID++;
00185 fPassiveWidgetCount++;
00186 addPassiveLine(subst("<widget type=\"hbargraph\" id=\"$0\">", T(fWidgetID)));
00187 addPassiveLine(subst("\t<label> $0 </label>", tree2str(label)));
00188 addPassiveLine(subst("\t<varname> $0 </varname>", tree2str(varname)));
00189 addPassiveLine(subst("\t<min> $0 </min>", T(tree2float(x))));
00190 addPassiveLine(subst("\t<max> $0 </max>", T(tree2float(y))));
00191 addPassiveLine("</widget>");
00192
00193 } else {
00194 fprintf(stderr, "Error describing widget : unrecognized expression\n");
00195 exit(1);
00196 }
00197
00198 return fWidgetID;
00199 }
00200
00201
00202