-rw-r--r-- | noncore/apps/opie-console/TEScreen.cpp | 17 | ||||
-rw-r--r-- | noncore/apps/opie-console/TEScreen.h | 2 | ||||
-rw-r--r-- | noncore/apps/opie-console/TEmulation.cpp | 4 | ||||
-rw-r--r-- | noncore/apps/opie-console/TEmulation.h | 7 | ||||
-rw-r--r-- | noncore/apps/opie-console/emulation_handler.cpp | 3 | ||||
-rw-r--r-- | noncore/apps/opie-console/emulation_handler.h | 1 | ||||
-rw-r--r-- | noncore/apps/opie-console/mainwindow.cpp | 35 | ||||
-rw-r--r-- | noncore/apps/opie-console/mainwindow.h | 1 | ||||
-rw-r--r-- | noncore/apps/opie-console/metafactory.cpp | 25 | ||||
-rw-r--r-- | noncore/apps/opie-console/metafactory.h | 11 |
10 files changed, 64 insertions, 42 deletions
diff --git a/noncore/apps/opie-console/TEScreen.cpp b/noncore/apps/opie-console/TEScreen.cpp index a3d115d..2675d31 100644 --- a/noncore/apps/opie-console/TEScreen.cpp +++ b/noncore/apps/opie-console/TEScreen.cpp | |||
@@ -940,231 +940,242 @@ void TEScreen::setBackColorToDefault() | |||
940 | void TEScreen::setForeColorToDefault() | 940 | void TEScreen::setForeColorToDefault() |
941 | { | 941 | { |
942 | cu_fg = DEFAULT_FORE_COLOR; | 942 | cu_fg = DEFAULT_FORE_COLOR; |
943 | effectiveRendition(); | 943 | effectiveRendition(); |
944 | } | 944 | } |
945 | 945 | ||
946 | /* ------------------------------------------------------------------------- */ | 946 | /* ------------------------------------------------------------------------- */ |
947 | /* */ | 947 | /* */ |
948 | /* Marking & Selection */ | 948 | /* Marking & Selection */ |
949 | /* */ | 949 | /* */ |
950 | /* ------------------------------------------------------------------------- */ | 950 | /* ------------------------------------------------------------------------- */ |
951 | 951 | ||
952 | void TEScreen::clearSelection() | 952 | void TEScreen::clearSelection() |
953 | { | 953 | { |
954 | sel_BR = -1; | 954 | sel_BR = -1; |
955 | sel_TL = -1; | 955 | sel_TL = -1; |
956 | sel_begin = -1; | 956 | sel_begin = -1; |
957 | } | 957 | } |
958 | 958 | ||
959 | void TEScreen::setSelBeginXY(const int x, const int y) | 959 | void TEScreen::setSelBeginXY(const int x, const int y) |
960 | { | 960 | { |
961 | sel_begin = loc(x,y+histCursor) ; | 961 | sel_begin = loc(x,y+histCursor) ; |
962 | sel_BR = sel_begin; | 962 | sel_BR = sel_begin; |
963 | sel_TL = sel_begin; | 963 | sel_TL = sel_begin; |
964 | } | 964 | } |
965 | 965 | ||
966 | void TEScreen::setSelExtentXY(const int x, const int y) | 966 | void TEScreen::setSelExtentXY(const int x, const int y) |
967 | { | 967 | { |
968 | if (sel_begin == -1) return; | 968 | if (sel_begin == -1) return; |
969 | int l = loc(x,y + histCursor); | 969 | int l = loc(x,y + histCursor); |
970 | 970 | ||
971 | if (l < sel_begin) | 971 | if (l < sel_begin) |
972 | { | 972 | { |
973 | sel_TL = l; | 973 | sel_TL = l; |
974 | sel_BR = sel_begin; | 974 | sel_BR = sel_begin; |
975 | } | 975 | } |
976 | else | 976 | else |
977 | { | 977 | { |
978 | /* FIXME, HACK to correct for x too far to the right... */ | 978 | /* FIXME, HACK to correct for x too far to the right... */ |
979 | if (( x == columns )|| (x == 0)) l--; | 979 | if (( x == columns )|| (x == 0)) l--; |
980 | 980 | ||
981 | sel_TL = sel_begin; | 981 | sel_TL = sel_begin; |
982 | sel_BR = l; | 982 | sel_BR = l; |
983 | } | 983 | } |
984 | } | 984 | } |
985 | 985 | ||
986 | QString TEScreen::getSelText(const BOOL preserve_line_breaks) | 986 | QString TEScreen::getSelText(const BOOL preserve_line_breaks) |
987 | { | 987 | { |
988 | if (sel_begin == -1) | 988 | if (sel_begin == -1) |
989 | return QString::null; // Selection got clear while selecting. | 989 | return QString::null; // Selection got clear while selecting. |
990 | 990 | ||
991 | int *m; // buffer to fill. | 991 | int *m; // buffer to fill. |
992 | int s, d; // source index, dest. index. | 992 | int s, d; // source index, dest. index. |
993 | int hist_BR = loc(0, hist.getLines()); | 993 | int hist_BR = loc(0, hist.getLines()); |
994 | int hY = sel_TL / columns; | 994 | int hY = sel_TL / columns; |
995 | int hX = sel_TL % columns; | 995 | int hX = sel_TL % columns; |
996 | int eol; // end of line | 996 | int eol; // end of line |
997 | 997 | ||
998 | s = sel_TL; // tracks copy in source. | 998 | s = sel_TL; // tracks copy in source. |
999 | 999 | ||
1000 | // allocate buffer for maximum | 1000 | // allocate buffer for maximum |
1001 | // possible size... | 1001 | // possible size... |
1002 | d = (sel_BR - sel_TL) / columns + 1; | 1002 | d = (sel_BR - sel_TL) / columns + 1; |
1003 | m = new int[d * (columns + 1) + 2]; | 1003 | m = new int[d * (columns + 1) + 2]; |
1004 | d = 0; | 1004 | d = 0; |
1005 | 1005 | ||
1006 | while (s <= sel_BR) | 1006 | while (s <= sel_BR) |
1007 | { | 1007 | { |
1008 | if (s < hist_BR) | 1008 | if (s < hist_BR) |
1009 | { // get lines from hist.history | 1009 | { // get lines from hist.history |
1010 | // buffer. | 1010 | // buffer. |
1011 | eol = hist.getLineLen(hY); | 1011 | eol = hist.getLineLen(hY); |
1012 | 1012 | ||
1013 | if ((hY == (sel_BR / columns)) && | 1013 | if ((hY == (sel_BR / columns)) && |
1014 | (eol >= (sel_BR % columns))) | 1014 | (eol >= (sel_BR % columns))) |
1015 | { | 1015 | { |
1016 | eol = sel_BR % columns + 1; | 1016 | eol = sel_BR % columns + 1; |
1017 | } | 1017 | } |
1018 | 1018 | ||
1019 | while (hX < eol) | 1019 | while (hX < eol) |
1020 | { | 1020 | { |
1021 | m[d++] = hist.getCell(hY, hX++).c; | 1021 | m[d++] = hist.getCell(hY, hX++).c; |
1022 | s++; | 1022 | s++; |
1023 | } | 1023 | } |
1024 | 1024 | ||
1025 | if (s <= sel_BR) | 1025 | if (s <= sel_BR) |
1026 | { | 1026 | { |
1027 | // The line break handling | 1027 | // The line break handling |
1028 | // It's different from the screen | 1028 | // It's different from the screen |
1029 | // image case! | 1029 | // image case! |
1030 | if (eol % columns == 0) | 1030 | if (eol % columns == 0) |
1031 | { | 1031 | { |
1032 | // That's either a completely filled | 1032 | // That's either a completely filled |
1033 | // line or an empty line | 1033 | // line or an empty line |
1034 | if (eol == 0) | 1034 | if (eol == 0) |
1035 | { | 1035 | { |
1036 | m[d++] = '\n'; | 1036 | m[d++] = '\n'; |
1037 | } | 1037 | } |
1038 | else | 1038 | else |
1039 | { | 1039 | { |
1040 | // We have a full line. | 1040 | // We have a full line. |
1041 | // FIXME: How can we handle newlines | 1041 | // FIXME: How can we handle newlines |
1042 | // at this position?! | 1042 | // at this position?! |
1043 | } | 1043 | } |
1044 | } | 1044 | } |
1045 | else if ((eol + 1) % columns == 0) | 1045 | else if ((eol + 1) % columns == 0) |
1046 | { | 1046 | { |
1047 | // FIXME: We don't know if this was a | 1047 | // FIXME: We don't know if this was a |
1048 | // space at the last position or a | 1048 | // space at the last position or a |
1049 | // short line!! | 1049 | // short line!! |
1050 | m[d++] = ' '; | 1050 | m[d++] = ' '; |
1051 | } | 1051 | } |
1052 | else | 1052 | else |
1053 | { | 1053 | { |
1054 | // We have a short line here. Put a | 1054 | // We have a short line here. Put a |
1055 | // newline or a space into the | 1055 | // newline or a space into the |
1056 | // buffer. | 1056 | // buffer. |
1057 | m[d++] = preserve_line_breaks ? '\n' : ' '; | 1057 | m[d++] = preserve_line_breaks ? '\n' : ' '; |
1058 | } | 1058 | } |
1059 | } | 1059 | } |
1060 | 1060 | ||
1061 | hY++; | 1061 | hY++; |
1062 | hX = 0; | 1062 | hX = 0; |
1063 | s = hY * columns; | 1063 | s = hY * columns; |
1064 | } | 1064 | } |
1065 | else | 1065 | else |
1066 | { // or from screen image. | 1066 | { // or from screen image. |
1067 | eol = (s / columns + 1) * columns - 1; | 1067 | eol = (s / columns + 1) * columns - 1; |
1068 | 1068 | ||
1069 | if (eol < sel_BR) | 1069 | if (eol < sel_BR) |
1070 | { | 1070 | { |
1071 | while ((eol > s) && | 1071 | while ((eol > s) && |
1072 | isspace(image[eol - hist_BR].c)) | 1072 | isspace(image[eol - hist_BR].c)) |
1073 | { | 1073 | { |
1074 | eol--; | 1074 | eol--; |
1075 | } | 1075 | } |
1076 | } | 1076 | } |
1077 | else | 1077 | else |
1078 | { | 1078 | { |
1079 | eol = sel_BR; | 1079 | eol = sel_BR; |
1080 | } | 1080 | } |
1081 | 1081 | ||
1082 | while (s <= eol) | 1082 | while (s <= eol) |
1083 | { | 1083 | { |
1084 | m[d++] = image[s++ - hist_BR].c; | 1084 | m[d++] = image[s++ - hist_BR].c; |
1085 | } | 1085 | } |
1086 | 1086 | ||
1087 | if (eol < sel_BR) | 1087 | if (eol < sel_BR) |
1088 | { | 1088 | { |
1089 | // eol processing see below ... | 1089 | // eol processing see below ... |
1090 | if ((eol + 1) % columns == 0) | 1090 | if ((eol + 1) % columns == 0) |
1091 | { | 1091 | { |
1092 | if (image[eol - hist_BR].c == ' ') | 1092 | if (image[eol - hist_BR].c == ' ') |
1093 | { | 1093 | { |
1094 | m[d++] = ' '; | 1094 | m[d++] = ' '; |
1095 | } | 1095 | } |
1096 | } | 1096 | } |
1097 | else | 1097 | else |
1098 | { | 1098 | { |
1099 | m[d++] = ((preserve_line_breaks || | 1099 | m[d++] = ((preserve_line_breaks || |
1100 | ((eol % columns) == 0)) ? | 1100 | ((eol % columns) == 0)) ? |
1101 | '\n' : ' '); | 1101 | '\n' : ' '); |
1102 | } | 1102 | } |
1103 | } | 1103 | } |
1104 | 1104 | ||
1105 | s = (eol / columns + 1) * columns; | 1105 | s = (eol / columns + 1) * columns; |
1106 | } | 1106 | } |
1107 | } | 1107 | } |
1108 | 1108 | ||
1109 | QChar* qc = new QChar[d]; | 1109 | QChar* qc = new QChar[d]; |
1110 | 1110 | ||
1111 | for (int i = 0; i < d; i++) | 1111 | for (int i = 0; i < d; i++) |
1112 | { | 1112 | { |
1113 | qc[i] = m[i]; | 1113 | qc[i] = m[i]; |
1114 | } | 1114 | } |
1115 | 1115 | ||
1116 | QString res(qc, d); | 1116 | QString res(qc, d); |
1117 | 1117 | ||
1118 | delete m; | 1118 | delete m; |
1119 | delete qc; | 1119 | delete qc; |
1120 | 1120 | ||
1121 | return res; | 1121 | return res; |
1122 | } | 1122 | } |
1123 | QString TEScreen::getHistory() { | ||
1124 | sel_begin = 0; | ||
1125 | sel_BR = sel_begin; | ||
1126 | sel_TL = sel_begin; | ||
1127 | setSelExtentXY(columns-1,lines-1); | ||
1128 | QString tmp=getSelText(true); | ||
1129 | while (tmp.at(tmp.length()-2).unicode()==10 && tmp.at(tmp.length()-1).unicode()==10) | ||
1130 | tmp.truncate(tmp.length()-1); | ||
1131 | |||
1132 | return tmp; | ||
1133 | } | ||
1123 | /* above ... end of line processing for selection -- psilva | 1134 | /* above ... end of line processing for selection -- psilva |
1124 | cases: | 1135 | cases: |
1125 | 1136 | ||
1126 | 1) (eol+1)%columns == 0 --> the whole line is filled. | 1137 | 1) (eol+1)%columns == 0 --> the whole line is filled. |
1127 | If the last char is a space, insert (preserve) space. otherwise | 1138 | If the last char is a space, insert (preserve) space. otherwise |
1128 | leave the text alone, so that words that are broken by linewrap | 1139 | leave the text alone, so that words that are broken by linewrap |
1129 | are preserved. | 1140 | are preserved. |
1130 | 1141 | ||
1131 | FIXME: | 1142 | FIXME: |
1132 | * this suppresses \n for command output that is | 1143 | * this suppresses \n for command output that is |
1133 | sized to the exact column width of the screen. | 1144 | sized to the exact column width of the screen. |
1134 | 1145 | ||
1135 | 2) eol%columns == 0 --> blank line. | 1146 | 2) eol%columns == 0 --> blank line. |
1136 | insert a \n unconditionally. | 1147 | insert a \n unconditionally. |
1137 | Do it either you would because you are in preserve_line_break mode, | 1148 | Do it either you would because you are in preserve_line_break mode, |
1138 | or because it's an ASCII paragraph delimiter, so even when | 1149 | or because it's an ASCII paragraph delimiter, so even when |
1139 | not preserving line_breaks, you want to preserve paragraph breaks. | 1150 | not preserving line_breaks, you want to preserve paragraph breaks. |
1140 | 1151 | ||
1141 | 3) else --> partially filled line | 1152 | 3) else --> partially filled line |
1142 | insert a \n in preserve line break mode, else a space | 1153 | insert a \n in preserve line break mode, else a space |
1143 | The space prevents concatenation of the last word of one | 1154 | The space prevents concatenation of the last word of one |
1144 | line with the first of the next. | 1155 | line with the first of the next. |
1145 | 1156 | ||
1146 | */ | 1157 | */ |
1147 | 1158 | ||
1148 | void TEScreen::addHistLine() | 1159 | void TEScreen::addHistLine() |
1149 | { | 1160 | { |
1150 | assert(hasScroll() || histCursor == 0); | 1161 | assert(hasScroll() || histCursor == 0); |
1151 | 1162 | ||
1152 | // add to hist buffer | 1163 | // add to hist buffer |
1153 | // we have to take care about scrolling, too... | 1164 | // we have to take care about scrolling, too... |
1154 | 1165 | ||
1155 | if (hasScroll()) | 1166 | if (hasScroll()) |
1156 | { ca dft; | 1167 | { ca dft; |
1157 | 1168 | ||
1158 | int end = columns-1; | 1169 | int end = columns-1; |
1159 | while (end >= 0 && image[end] == dft) | 1170 | while (end >= 0 && image[end] == dft) |
1160 | end -= 1; | 1171 | end -= 1; |
1161 | 1172 | ||
1162 | hist.addCells(image,end+1); | 1173 | hist.addCells(image,end+1); |
1163 | hist.addLine(); | 1174 | hist.addLine(); |
1164 | 1175 | ||
1165 | // adjust history cursor | 1176 | // adjust history cursor |
1166 | histCursor += (hist.getLines()-1 == histCursor); | 1177 | histCursor += (hist.getLines()-1 == histCursor); |
1167 | } | 1178 | } |
1168 | 1179 | ||
1169 | if (!hasScroll()) histCursor = 0; //FIXME: a poor workaround | 1180 | if (!hasScroll()) histCursor = 0; //FIXME: a poor workaround |
1170 | } | 1181 | } |
diff --git a/noncore/apps/opie-console/TEScreen.h b/noncore/apps/opie-console/TEScreen.h index 473ce79..a840b44 100644 --- a/noncore/apps/opie-console/TEScreen.h +++ b/noncore/apps/opie-console/TEScreen.h | |||
@@ -117,96 +117,98 @@ public: // these are all `Screen' operations | |||
117 | void setForeColorToDefault(); | 117 | void setForeColorToDefault(); |
118 | void setBackColorToDefault(); | 118 | void setBackColorToDefault(); |
119 | // | 119 | // |
120 | // ------------------------------------- | 120 | // ------------------------------------- |
121 | // | 121 | // |
122 | BOOL getMode (int n); | 122 | BOOL getMode (int n); |
123 | // | 123 | // |
124 | // only for report cursor position | 124 | // only for report cursor position |
125 | // | 125 | // |
126 | int getCursorX(); | 126 | int getCursorX(); |
127 | int getCursorY(); | 127 | int getCursorY(); |
128 | // | 128 | // |
129 | // ------------------------------------- | 129 | // ------------------------------------- |
130 | // | 130 | // |
131 | void clear(); | 131 | void clear(); |
132 | void home(); | 132 | void home(); |
133 | void reset(); | 133 | void reset(); |
134 | // | 134 | // |
135 | void ShowCharacter(unsigned short c); | 135 | void ShowCharacter(unsigned short c); |
136 | // | 136 | // |
137 | void resizeImage(int new_lines, int new_columns); | 137 | void resizeImage(int new_lines, int new_columns); |
138 | // | 138 | // |
139 | ca* getCookedImage(); | 139 | ca* getCookedImage(); |
140 | 140 | ||
141 | /*! return the number of lines. */ | 141 | /*! return the number of lines. */ |
142 | int getLines() { return lines; } | 142 | int getLines() { return lines; } |
143 | /*! return the number of columns. */ | 143 | /*! return the number of columns. */ |
144 | int getColumns() { return columns; } | 144 | int getColumns() { return columns; } |
145 | 145 | ||
146 | /*! set the position of the history cursor. */ | 146 | /*! set the position of the history cursor. */ |
147 | void setHistCursor(int cursor); | 147 | void setHistCursor(int cursor); |
148 | /*! return the position of the history cursor. */ | 148 | /*! return the position of the history cursor. */ |
149 | int getHistCursor(); | 149 | int getHistCursor(); |
150 | 150 | ||
151 | int getHistLines (); | 151 | int getHistLines (); |
152 | void setScroll(bool on); | 152 | void setScroll(bool on); |
153 | bool hasScroll(); | 153 | bool hasScroll(); |
154 | 154 | ||
155 | // | 155 | // |
156 | // Selection | 156 | // Selection |
157 | // | 157 | // |
158 | void setSelBeginXY(const int x, const int y); | 158 | void setSelBeginXY(const int x, const int y); |
159 | void setSelExtentXY(const int x, const int y); | 159 | void setSelExtentXY(const int x, const int y); |
160 | void clearSelection(); | 160 | void clearSelection(); |
161 | QString getSelText(const BOOL preserve_line_breaks); | 161 | QString getSelText(const BOOL preserve_line_breaks); |
162 | 162 | ||
163 | void checkSelection(int from, int to); | 163 | void checkSelection(int from, int to); |
164 | 164 | ||
165 | QString getHistory(); | ||
166 | |||
165 | private: // helper | 167 | private: // helper |
166 | 168 | ||
167 | void clearImage(int loca, int loce, char c); | 169 | void clearImage(int loca, int loce, char c); |
168 | void moveImage(int dst, int loca, int loce); | 170 | void moveImage(int dst, int loca, int loce); |
169 | 171 | ||
170 | void scrollUp(int from, int i); | 172 | void scrollUp(int from, int i); |
171 | void scrollDown(int from, int i); | 173 | void scrollDown(int from, int i); |
172 | 174 | ||
173 | void addHistLine(); | 175 | void addHistLine(); |
174 | 176 | ||
175 | void initTabStops(); | 177 | void initTabStops(); |
176 | 178 | ||
177 | void effectiveRendition(); | 179 | void effectiveRendition(); |
178 | void reverseRendition(ca* p); | 180 | void reverseRendition(ca* p); |
179 | 181 | ||
180 | private: | 182 | private: |
181 | 183 | ||
182 | /* | 184 | /* |
183 | The state of the screen is more complex as one would | 185 | The state of the screen is more complex as one would |
184 | expect first. The screem does really do part of the | 186 | expect first. The screem does really do part of the |
185 | emulation providing state informations in form of modes, | 187 | emulation providing state informations in form of modes, |
186 | margins, tabulators, cursor etc. | 188 | margins, tabulators, cursor etc. |
187 | 189 | ||
188 | Even more unexpected are variables to save and restore | 190 | Even more unexpected are variables to save and restore |
189 | parts of the state. | 191 | parts of the state. |
190 | */ | 192 | */ |
191 | 193 | ||
192 | // screen image ---------------- | 194 | // screen image ---------------- |
193 | 195 | ||
194 | int lines; | 196 | int lines; |
195 | int columns; | 197 | int columns; |
196 | ca *image; // [lines][columns] | 198 | ca *image; // [lines][columns] |
197 | 199 | ||
198 | // history buffer --------------- | 200 | // history buffer --------------- |
199 | 201 | ||
200 | int histCursor; // display position relative to start of the history buffer | 202 | int histCursor; // display position relative to start of the history buffer |
201 | HistoryScroll hist; | 203 | HistoryScroll hist; |
202 | 204 | ||
203 | // cursor location | 205 | // cursor location |
204 | 206 | ||
205 | int cuX; | 207 | int cuX; |
206 | int cuY; | 208 | int cuY; |
207 | 209 | ||
208 | // cursor color and rendition info | 210 | // cursor color and rendition info |
209 | 211 | ||
210 | UINT8 cu_fg; // foreground | 212 | UINT8 cu_fg; // foreground |
211 | UINT8 cu_bg; // background | 213 | UINT8 cu_bg; // background |
212 | UINT8 cu_re; // rendition | 214 | UINT8 cu_re; // rendition |
diff --git a/noncore/apps/opie-console/TEmulation.cpp b/noncore/apps/opie-console/TEmulation.cpp index 7a0c624..3b1b9e1 100644 --- a/noncore/apps/opie-console/TEmulation.cpp +++ b/noncore/apps/opie-console/TEmulation.cpp | |||
@@ -226,97 +226,99 @@ void TEmulation::onKeyPress( QKeyEvent* ev ) | |||
226 | } | 226 | } |
227 | 227 | ||
228 | // Unblocking, Byte to Unicode translation --------------------------------- -- | 228 | // Unblocking, Byte to Unicode translation --------------------------------- -- |
229 | 229 | ||
230 | /* | 230 | /* |
231 | We are doing code conversion from locale to unicode first. | 231 | We are doing code conversion from locale to unicode first. |
232 | */ | 232 | */ |
233 | 233 | ||
234 | void TEmulation::onRcvBlock(const char *s, int len) | 234 | void TEmulation::onRcvBlock(const char *s, int len) |
235 | { | 235 | { |
236 | bulkStart(); | 236 | bulkStart(); |
237 | bulk_incnt += 1; | 237 | bulk_incnt += 1; |
238 | for (int i = 0; i < len; i++) | 238 | for (int i = 0; i < len; i++) |
239 | { | 239 | { |
240 | QString result = decoder->toUnicode(&s[i],1); | 240 | QString result = decoder->toUnicode(&s[i],1); |
241 | int reslen = result.length(); | 241 | int reslen = result.length(); |
242 | for (int j = 0; j < reslen; j++) | 242 | for (int j = 0; j < reslen; j++) |
243 | onRcvChar(result[j].unicode()); | 243 | onRcvChar(result[j].unicode()); |
244 | if (s[i] == '\n') bulkNewline(); | 244 | if (s[i] == '\n') bulkNewline(); |
245 | } | 245 | } |
246 | bulkEnd(); | 246 | bulkEnd(); |
247 | } | 247 | } |
248 | 248 | ||
249 | // Selection --------------------------------------------------------------- -- | 249 | // Selection --------------------------------------------------------------- -- |
250 | 250 | ||
251 | void TEmulation::onSelectionBegin(const int x, const int y) { | 251 | void TEmulation::onSelectionBegin(const int x, const int y) { |
252 | if (!connected) return; | 252 | if (!connected) return; |
253 | scr->setSelBeginXY(x,y); | 253 | scr->setSelBeginXY(x,y); |
254 | showBulk(); | 254 | showBulk(); |
255 | } | 255 | } |
256 | 256 | ||
257 | void TEmulation::onSelectionExtend(const int x, const int y) { | 257 | void TEmulation::onSelectionExtend(const int x, const int y) { |
258 | if (!connected) return; | 258 | if (!connected) return; |
259 | scr->setSelExtentXY(x,y); | 259 | scr->setSelExtentXY(x,y); |
260 | showBulk(); | 260 | showBulk(); |
261 | } | 261 | } |
262 | 262 | ||
263 | void TEmulation::setSelection(const BOOL preserve_line_breaks) { | 263 | void TEmulation::setSelection(const BOOL preserve_line_breaks) { |
264 | if (!connected) return; | 264 | if (!connected) return; |
265 | QString t = scr->getSelText(preserve_line_breaks); | 265 | QString t = scr->getSelText(preserve_line_breaks); |
266 | if (!t.isNull()) gui->setSelection(t); | 266 | if (!t.isNull()) gui->setSelection(t); |
267 | } | 267 | } |
268 | 268 | ||
269 | void TEmulation::clearSelection() { | 269 | void TEmulation::clearSelection() { |
270 | if (!connected) return; | 270 | if (!connected) return; |
271 | scr->clearSelection(); | 271 | scr->clearSelection(); |
272 | showBulk(); | 272 | showBulk(); |
273 | } | 273 | } |
274 | 274 | void TEmulation::streamHistory(QTextStream* stream) { | |
275 | *stream << scr->getHistory(); | ||
276 | } | ||
275 | // Refreshing -------------------------------------------------------------- -- | 277 | // Refreshing -------------------------------------------------------------- -- |
276 | 278 | ||
277 | #define BULK_TIMEOUT 20 | 279 | #define BULK_TIMEOUT 20 |
278 | 280 | ||
279 | /*! | 281 | /*! |
280 | called when \n comes in. Evtl. triggers showBulk at endBulk | 282 | called when \n comes in. Evtl. triggers showBulk at endBulk |
281 | */ | 283 | */ |
282 | 284 | ||
283 | void TEmulation::bulkNewline() | 285 | void TEmulation::bulkNewline() |
284 | { | 286 | { |
285 | bulk_nlcnt += 1; | 287 | bulk_nlcnt += 1; |
286 | bulk_incnt = 0; // reset bulk counter since `nl' rule applies | 288 | bulk_incnt = 0; // reset bulk counter since `nl' rule applies |
287 | } | 289 | } |
288 | 290 | ||
289 | /*! | 291 | /*! |
290 | */ | 292 | */ |
291 | 293 | ||
292 | void TEmulation::showBulk() | 294 | void TEmulation::showBulk() |
293 | { | 295 | { |
294 | bulk_nlcnt = 0; // reset bulk newline counter | 296 | bulk_nlcnt = 0; // reset bulk newline counter |
295 | bulk_incnt = 0; // reset bulk counter | 297 | bulk_incnt = 0; // reset bulk counter |
296 | if (connected) | 298 | if (connected) |
297 | { | 299 | { |
298 | ca* image = scr->getCookedImage(); // get the image | 300 | ca* image = scr->getCookedImage(); // get the image |
299 | gui->setImage(image, | 301 | gui->setImage(image, |
300 | scr->getLines(), | 302 | scr->getLines(), |
301 | scr->getColumns()); // actual refresh | 303 | scr->getColumns()); // actual refresh |
302 | free(image); | 304 | free(image); |
303 | //FIXME: check that we do not trigger other draw event here. | 305 | //FIXME: check that we do not trigger other draw event here. |
304 | gui->setScroll(scr->getHistCursor(),scr->getHistLines()); | 306 | gui->setScroll(scr->getHistCursor(),scr->getHistLines()); |
305 | } | 307 | } |
306 | } | 308 | } |
307 | 309 | ||
308 | void TEmulation::bulkStart() | 310 | void TEmulation::bulkStart() |
309 | { | 311 | { |
310 | if (bulk_timer.isActive()) bulk_timer.stop(); | 312 | if (bulk_timer.isActive()) bulk_timer.stop(); |
311 | } | 313 | } |
312 | 314 | ||
313 | void TEmulation::bulkEnd() | 315 | void TEmulation::bulkEnd() |
314 | { | 316 | { |
315 | if ( bulk_nlcnt > gui->Lines() || bulk_incnt > 20 ) | 317 | if ( bulk_nlcnt > gui->Lines() || bulk_incnt > 20 ) |
316 | showBulk(); // resets bulk_??cnt to 0, too. | 318 | showBulk(); // resets bulk_??cnt to 0, too. |
317 | else | 319 | else |
318 | bulk_timer.start(BULK_TIMEOUT,TRUE); | 320 | bulk_timer.start(BULK_TIMEOUT,TRUE); |
319 | } | 321 | } |
320 | 322 | ||
321 | void TEmulation::setConnect(bool c) | 323 | void TEmulation::setConnect(bool c) |
322 | { | 324 | { |
diff --git a/noncore/apps/opie-console/TEmulation.h b/noncore/apps/opie-console/TEmulation.h index ec15e7a..d7b3d6d 100644 --- a/noncore/apps/opie-console/TEmulation.h +++ b/noncore/apps/opie-console/TEmulation.h | |||
@@ -1,117 +1,122 @@ | |||
1 | /* -------------------------------------------------------------------------- */ | 1 | /* -------------------------------------------------------------------------- */ |
2 | /* */ | 2 | /* */ |
3 | /* [emulation.h] Fundamental Terminal Emulation */ | 3 | /* [emulation.h] Fundamental Terminal Emulation */ |
4 | /* */ | 4 | /* */ |
5 | /* -------------------------------------------------------------------------- */ | 5 | /* -------------------------------------------------------------------------- */ |
6 | /* */ | 6 | /* */ |
7 | /* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ | 7 | /* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ |
8 | /* */ | 8 | /* */ |
9 | /* This file is part of Konsole - an X terminal for KDE */ | 9 | /* This file is part of Konsole - an X terminal for KDE */ |
10 | /* */ | 10 | /* */ |
11 | /* -------------------------------------------------------------------------- */ | 11 | /* -------------------------------------------------------------------------- */ |
12 | /* */ | 12 | /* */ |
13 | /* Ported Konsole to Qt/Embedded */ | 13 | /* Ported Konsole to Qt/Embedded */ |
14 | /* */ | 14 | /* */ |
15 | /* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ | 15 | /* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ |
16 | /* */ | 16 | /* */ |
17 | /* -------------------------------------------------------------------------- */ | 17 | /* -------------------------------------------------------------------------- */ |
18 | 18 | ||
19 | #ifndef EMULATION_H | 19 | #ifndef EMULATION_H |
20 | #define EMULATION_H | 20 | #define EMULATION_H |
21 | 21 | ||
22 | #include "TEWidget.h" | 22 | #include "TEWidget.h" |
23 | #include "TEScreen.h" | 23 | #include "TEScreen.h" |
24 | #include <qtimer.h> | 24 | #include <qtimer.h> |
25 | #include <stdio.h> | 25 | #include <stdio.h> |
26 | #include <qtextcodec.h> | 26 | #include <qtextcodec.h> |
27 | #include <qtextstream.h> | ||
28 | |||
27 | #include "keytrans.h" | 29 | #include "keytrans.h" |
28 | 30 | ||
29 | class TEmulation : public QObject | 31 | class TEmulation : public QObject |
30 | { Q_OBJECT | 32 | { Q_OBJECT |
31 | 33 | ||
32 | public: | 34 | public: |
33 | 35 | ||
34 | TEmulation(TEWidget* gui); | 36 | TEmulation(TEWidget* gui); |
35 | ~TEmulation(); | 37 | ~TEmulation(); |
36 | 38 | ||
37 | public: | 39 | public: |
38 | virtual void setHistory(bool on); | 40 | virtual void setHistory(bool on); |
39 | virtual bool history(); | 41 | virtual bool history(); |
42 | virtual void streamHistory( QTextStream* ); | ||
40 | 43 | ||
41 | public slots: // signals incoming from TEWidget | 44 | public slots: // signals incoming from TEWidget |
42 | 45 | ||
43 | virtual void onImageSizeChange(int lines, int columns); | 46 | virtual void onImageSizeChange(int lines, int columns); |
44 | virtual void onHistoryCursorChange(int cursor); | 47 | virtual void onHistoryCursorChange(int cursor); |
45 | virtual void onKeyPress(QKeyEvent*); | 48 | virtual void onKeyPress(QKeyEvent*); |
46 | 49 | ||
47 | virtual void clearSelection(); | 50 | virtual void clearSelection(); |
48 | virtual void onSelectionBegin(const int x, const int y); | 51 | virtual void onSelectionBegin(const int x, const int y); |
49 | virtual void onSelectionExtend(const int x, const int y); | 52 | virtual void onSelectionExtend(const int x, const int y); |
50 | virtual void setSelection(const BOOL preserve_line_breaks); | 53 | virtual void setSelection(const BOOL preserve_line_breaks); |
51 | 54 | ||
52 | public slots: // signals incoming from data source | 55 | public slots: // signals incoming from data source |
53 | 56 | ||
54 | void onRcvBlock(const char* txt,int len); | 57 | void onRcvBlock(const char* txt,int len); |
55 | 58 | ||
56 | signals: | 59 | signals: |
57 | 60 | ||
58 | void sndBlock(const char* txt,int len); | 61 | void sndBlock(const char* txt,int len); |
59 | void ImageSizeChanged(int lines, int columns); | 62 | void ImageSizeChanged(int lines, int columns); |
60 | void changeColumns(int columns); | 63 | void changeColumns(int columns); |
61 | void changeTitle(int arg, const char* str); | 64 | void changeTitle(int arg, const char* str); |
62 | 65 | ||
63 | public: | 66 | public: |
64 | 67 | ||
65 | virtual void onRcvChar(int); | 68 | virtual void onRcvChar(int); |
66 | 69 | ||
67 | virtual void setMode (int) = 0; | 70 | virtual void setMode (int) = 0; |
68 | virtual void resetMode(int) = 0; | 71 | virtual void resetMode(int) = 0; |
69 | 72 | ||
70 | virtual void sendString(const char*) = 0; | 73 | virtual void sendString(const char*) = 0; |
71 | 74 | ||
72 | virtual void setConnect(bool r); | 75 | virtual void setConnect(bool r); |
73 | void setColumns(int columns); | 76 | void setColumns(int columns); |
74 | 77 | ||
75 | void setKeytrans(int no); | 78 | void setKeytrans(int no); |
76 | void setKeytrans(const char * no); | 79 | void setKeytrans(const char * no); |
77 | 80 | ||
81 | |||
82 | |||
78 | protected: | 83 | protected: |
79 | 84 | ||
80 | TEWidget* gui; | 85 | TEWidget* gui; |
81 | TEScreen* scr; // referes to one `screen' | 86 | TEScreen* scr; // referes to one `screen' |
82 | TEScreen* screen[2]; // 0 = primary, 1 = alternate | 87 | TEScreen* screen[2]; // 0 = primary, 1 = alternate |
83 | void setScreen(int n); // set `scr' to `screen[n]' | 88 | void setScreen(int n); // set `scr' to `screen[n]' |
84 | 89 | ||
85 | bool connected; // communicate with widget | 90 | bool connected; // communicate with widget |
86 | 91 | ||
87 | void setCodec(int c); // codec number, 0 = locale, 1=utf8 | 92 | void setCodec(int c); // codec number, 0 = locale, 1=utf8 |
88 | 93 | ||
89 | QTextCodec* codec; | 94 | QTextCodec* codec; |
90 | QTextCodec* localeCodec; | 95 | QTextCodec* localeCodec; |
91 | QTextDecoder* decoder; | 96 | QTextDecoder* decoder; |
92 | 97 | ||
93 | KeyTrans* keytrans; | 98 | KeyTrans* keytrans; |
94 | 99 | ||
95 | // refreshing related material. | 100 | // refreshing related material. |
96 | // this is localized in the class. | 101 | // this is localized in the class. |
97 | private slots: // triggered by timer | 102 | private slots: // triggered by timer |
98 | 103 | ||
99 | void showBulk(); | 104 | void showBulk(); |
100 | 105 | ||
101 | private: | 106 | private: |
102 | 107 | ||
103 | void bulkNewline(); | 108 | void bulkNewline(); |
104 | void bulkStart(); | 109 | void bulkStart(); |
105 | void bulkEnd(); | 110 | void bulkEnd(); |
106 | 111 | ||
107 | private: | 112 | private: |
108 | 113 | ||
109 | QTimer bulk_timer; | 114 | QTimer bulk_timer; |
110 | int bulk_nlcnt; // bulk newline counter | 115 | int bulk_nlcnt; // bulk newline counter |
111 | char* SelectedText; | 116 | char* SelectedText; |
112 | int bulk_incnt; // bulk counter | 117 | int bulk_incnt; // bulk counter |
113 | 118 | ||
114 | 119 | ||
115 | }; | 120 | }; |
116 | 121 | ||
117 | #endif // ifndef EMULATION_H | 122 | #endif // ifndef EMULATION_H |
diff --git a/noncore/apps/opie-console/emulation_handler.cpp b/noncore/apps/opie-console/emulation_handler.cpp index 7924568..235facb 100644 --- a/noncore/apps/opie-console/emulation_handler.cpp +++ b/noncore/apps/opie-console/emulation_handler.cpp | |||
@@ -1,81 +1,84 @@ | |||
1 | #include <qwidget.h> | 1 | #include <qwidget.h> |
2 | #include <qpushbutton.h> | 2 | #include <qpushbutton.h> |
3 | 3 | ||
4 | #include "TEWidget.h" | 4 | #include "TEWidget.h" |
5 | #include "TEmuVt102.h" | 5 | #include "TEmuVt102.h" |
6 | 6 | ||
7 | #include "profile.h" | 7 | #include "profile.h" |
8 | #include "emulation_handler.h" | 8 | #include "emulation_handler.h" |
9 | #include "script.h" | 9 | #include "script.h" |
10 | 10 | ||
11 | EmulationHandler::EmulationHandler( const Profile& prof, QWidget* parent,const char* name ) | 11 | EmulationHandler::EmulationHandler( const Profile& prof, QWidget* parent,const char* name ) |
12 | : QObject(0, name ) | 12 | : QObject(0, name ) |
13 | { | 13 | { |
14 | m_teWid = new TEWidget( parent, "TerminalMain"); | 14 | m_teWid = new TEWidget( parent, "TerminalMain"); |
15 | // use setWrapAt(0) for classic behaviour (wrap at screen width, no scrollbar) | 15 | // use setWrapAt(0) for classic behaviour (wrap at screen width, no scrollbar) |
16 | // use setWrapAt(80) for normal console with scrollbar | 16 | // use setWrapAt(80) for normal console with scrollbar |
17 | setWrap(prof.readNumEntry("Wrap", 0) ? 0 : 80); | 17 | setWrap(prof.readNumEntry("Wrap", 0) ? 0 : 80); |
18 | m_teWid->setMinimumSize(150, 70 ); | 18 | m_teWid->setMinimumSize(150, 70 ); |
19 | m_script = 0; | 19 | m_script = 0; |
20 | parent->resize( m_teWid->calcSize(80, 24 ) ); | 20 | parent->resize( m_teWid->calcSize(80, 24 ) ); |
21 | m_teEmu = new TEmuVt102(m_teWid ); | 21 | m_teEmu = new TEmuVt102(m_teWid ); |
22 | 22 | ||
23 | connect(m_teEmu,SIGNAL(ImageSizeChanged(int, int) ), | 23 | connect(m_teEmu,SIGNAL(ImageSizeChanged(int, int) ), |
24 | this, SIGNAL(changeSize(int, int) ) ); | 24 | this, SIGNAL(changeSize(int, int) ) ); |
25 | connect(m_teEmu, SIGNAL(sndBlock(const char*, int) ), | 25 | connect(m_teEmu, SIGNAL(sndBlock(const char*, int) ), |
26 | this, SLOT(recvEmulation(const char*, int) ) ); | 26 | this, SLOT(recvEmulation(const char*, int) ) ); |
27 | m_teEmu->setConnect( true ); | 27 | m_teEmu->setConnect( true ); |
28 | m_teEmu->setHistory( TRUE ); | 28 | m_teEmu->setHistory( TRUE ); |
29 | load( prof ); | 29 | load( prof ); |
30 | 30 | ||
31 | 31 | ||
32 | 32 | ||
33 | } | 33 | } |
34 | TEmulation* EmulationHandler::emulation() { | ||
35 | return m_teEmu; | ||
36 | } | ||
34 | EmulationHandler::~EmulationHandler() { | 37 | EmulationHandler::~EmulationHandler() { |
35 | if (isRecording()) | 38 | if (isRecording()) |
36 | clearScript(); | 39 | clearScript(); |
37 | delete m_teEmu; | 40 | delete m_teEmu; |
38 | delete m_teWid; | 41 | delete m_teWid; |
39 | } | 42 | } |
40 | 43 | ||
41 | void EmulationHandler::load( const Profile& prof) { | 44 | void EmulationHandler::load( const Profile& prof) { |
42 | m_teWid->setVTFont( font( prof.readNumEntry("Font") ) ); | 45 | m_teWid->setVTFont( font( prof.readNumEntry("Font") ) ); |
43 | int num = prof.readNumEntry("Color"); | 46 | int num = prof.readNumEntry("Color"); |
44 | setColor( foreColor(num), backColor(num) ); | 47 | setColor( foreColor(num), backColor(num) ); |
45 | m_teWid->setBackgroundColor(backColor(num) ); | 48 | m_teWid->setBackgroundColor(backColor(num) ); |
46 | 49 | ||
47 | int term = prof.readNumEntry("Terminal", 0) ; | 50 | int term = prof.readNumEntry("Terminal", 0) ; |
48 | switch(term) { | 51 | switch(term) { |
49 | default: | 52 | default: |
50 | case Profile::VT102: | 53 | case Profile::VT102: |
51 | case Profile::VT100: | 54 | case Profile::VT100: |
52 | m_teEmu->setKeytrans("vt100.keytab"); | 55 | m_teEmu->setKeytrans("vt100.keytab"); |
53 | break; | 56 | break; |
54 | case Profile::Linux: | 57 | case Profile::Linux: |
55 | m_teEmu->setKeytrans("linux.keytab"); | 58 | m_teEmu->setKeytrans("linux.keytab"); |
56 | break; | 59 | break; |
57 | case Profile::XTerm: | 60 | case Profile::XTerm: |
58 | m_teEmu->setKeytrans("default.Keytab"); | 61 | m_teEmu->setKeytrans("default.Keytab"); |
59 | break; | 62 | break; |
60 | } | 63 | } |
61 | } | 64 | } |
62 | void EmulationHandler::recv( const QByteArray& ar) { | 65 | void EmulationHandler::recv( const QByteArray& ar) { |
63 | m_teEmu->onRcvBlock(ar.data(), ar.count() ); | 66 | m_teEmu->onRcvBlock(ar.data(), ar.count() ); |
64 | } | 67 | } |
65 | void EmulationHandler::recvEmulation(const char* src, int len ) { | 68 | void EmulationHandler::recvEmulation(const char* src, int len ) { |
66 | QByteArray ar(len); | 69 | QByteArray ar(len); |
67 | 70 | ||
68 | memcpy(ar.data(), src, sizeof(char) * len ); | 71 | memcpy(ar.data(), src, sizeof(char) * len ); |
69 | if (isRecording()) | 72 | if (isRecording()) |
70 | m_script->append(ar); | 73 | m_script->append(ar); |
71 | emit send(ar); | 74 | emit send(ar); |
72 | } | 75 | } |
73 | QWidget* EmulationHandler::widget() { | 76 | QWidget* EmulationHandler::widget() { |
74 | return m_teWid; | 77 | return m_teWid; |
75 | } | 78 | } |
76 | /* | 79 | /* |
77 | * allocate a new table of colors | 80 | * allocate a new table of colors |
78 | */ | 81 | */ |
79 | void EmulationHandler::setColor( const QColor& fore, const QColor& back ) { | 82 | void EmulationHandler::setColor( const QColor& fore, const QColor& back ) { |
80 | ColorEntry table[TABLE_COLORS]; | 83 | ColorEntry table[TABLE_COLORS]; |
81 | const ColorEntry *defaultCt = m_teWid->getdefaultColorTable(); | 84 | const ColorEntry *defaultCt = m_teWid->getdefaultColorTable(); |
diff --git a/noncore/apps/opie-console/emulation_handler.h b/noncore/apps/opie-console/emulation_handler.h index 7bc6f16..1338525 100644 --- a/noncore/apps/opie-console/emulation_handler.h +++ b/noncore/apps/opie-console/emulation_handler.h | |||
@@ -2,93 +2,94 @@ | |||
2 | #define OPIE_EMULATION_HANDLER_H | 2 | #define OPIE_EMULATION_HANDLER_H |
3 | 3 | ||
4 | #include <qobject.h> | 4 | #include <qobject.h> |
5 | #include <qcolor.h> | 5 | #include <qcolor.h> |
6 | #include <qcstring.h> | 6 | #include <qcstring.h> |
7 | 7 | ||
8 | /* | 8 | /* |
9 | * Badly ibotty lacks the time to finish | 9 | * Badly ibotty lacks the time to finish |
10 | * his widget in time.. | 10 | * his widget in time.. |
11 | * Never the less we've to have an EmulationWidget | 11 | * Never the less we've to have an EmulationWidget |
12 | * This is why I'm taking the inferior not cleaned | 12 | * This is why I'm taking the inferior not cleaned |
13 | * up TE* KDE STUFF | 13 | * up TE* KDE STUFF |
14 | */ | 14 | */ |
15 | 15 | ||
16 | /** | 16 | /** |
17 | * This is the layer above the IOLayer* | 17 | * This is the layer above the IOLayer* |
18 | * This nice QObject here will get stuff from | 18 | * This nice QObject here will get stuff from |
19 | * got a slot and a signal | 19 | * got a slot and a signal |
20 | * the signal for data | 20 | * the signal for data |
21 | * the slot for receiving | 21 | * the slot for receiving |
22 | * it'll set up the widget internally | 22 | * it'll set up the widget internally |
23 | * and manage the communication between | 23 | * and manage the communication between |
24 | * the pre QByteArray world! | 24 | * the pre QByteArray world! |
25 | */ | 25 | */ |
26 | class Profile; | 26 | class Profile; |
27 | class QWidget; | 27 | class QWidget; |
28 | class QPushButton; | 28 | class QPushButton; |
29 | class TEWidget; | 29 | class TEWidget; |
30 | class TEmulation; | 30 | class TEmulation; |
31 | class QFont; | 31 | class QFont; |
32 | class Script; | 32 | class Script; |
33 | class EmulationHandler : public QObject { | 33 | class EmulationHandler : public QObject { |
34 | Q_OBJECT | 34 | Q_OBJECT |
35 | public: | 35 | public: |
36 | /** | 36 | /** |
37 | * simple c'tor the parent of the TEWdiget | 37 | * simple c'tor the parent of the TEWdiget |
38 | * and a name | 38 | * and a name |
39 | * and a Profile | 39 | * and a Profile |
40 | */ | 40 | */ |
41 | EmulationHandler( const Profile&, QWidget* parent, const char* name = 0l ); | 41 | EmulationHandler( const Profile&, QWidget* parent, const char* name = 0l ); |
42 | 42 | ||
43 | /** | 43 | /** |
44 | * delete all components | 44 | * delete all components |
45 | */ | 45 | */ |
46 | ~EmulationHandler(); | 46 | ~EmulationHandler(); |
47 | 47 | ||
48 | void load( const Profile& ); | 48 | void load( const Profile& ); |
49 | QWidget* widget(); | 49 | QWidget* widget(); |
50 | TEmulation *emulation(); | ||
50 | void setColor( const QColor& fore, const QColor& back ); | 51 | void setColor( const QColor& fore, const QColor& back ); |
51 | QPushButton* cornerButton(); | 52 | QPushButton* cornerButton(); |
52 | 53 | ||
53 | /* Scripts */ | 54 | /* Scripts */ |
54 | /* Create a new script and record all typed characters */ | 55 | /* Create a new script and record all typed characters */ |
55 | void startRecording(); | 56 | void startRecording(); |
56 | 57 | ||
57 | /* Return whether we are currently recording a script */ | 58 | /* Return whether we are currently recording a script */ |
58 | bool isRecording(); | 59 | bool isRecording(); |
59 | 60 | ||
60 | /* Return the current script (or NULL) */ | 61 | /* Return the current script (or NULL) */ |
61 | Script *script(); | 62 | Script *script(); |
62 | 63 | ||
63 | /* Stop recording and remove the current script from memory */ | 64 | /* Stop recording and remove the current script from memory */ |
64 | void clearScript(); | 65 | void clearScript(); |
65 | 66 | ||
66 | /* Run a script by forwarding its keys to the EmulationLayer */ | 67 | /* Run a script by forwarding its keys to the EmulationLayer */ |
67 | void runScript(const Script *); | 68 | void runScript(const Script *); |
68 | 69 | ||
69 | /* Propagate change to widget */ | 70 | /* Propagate change to widget */ |
70 | void setWrap(int columns); | 71 | void setWrap(int columns); |
71 | signals: | 72 | signals: |
72 | void send( const QByteArray& ); | 73 | void send( const QByteArray& ); |
73 | void changeSize(int rows, int cols ); | 74 | void changeSize(int rows, int cols ); |
74 | 75 | ||
75 | 76 | ||
76 | public slots: | 77 | public slots: |
77 | void recv( const QByteArray& ); | 78 | void recv( const QByteArray& ); |
78 | void paste(); | 79 | void paste(); |
79 | void copy(); | 80 | void copy(); |
80 | 81 | ||
81 | private slots: | 82 | private slots: |
82 | void recvEmulation( const char*, int len ); | 83 | void recvEmulation( const char*, int len ); |
83 | private: | 84 | private: |
84 | QFont font( int ); | 85 | QFont font( int ); |
85 | QColor foreColor(int ); | 86 | QColor foreColor(int ); |
86 | QColor backColor(int ); | 87 | QColor backColor(int ); |
87 | 88 | ||
88 | private: | 89 | private: |
89 | TEWidget* m_teWid; | 90 | TEWidget* m_teWid; |
90 | TEmulation* m_teEmu; | 91 | TEmulation* m_teEmu; |
91 | Script * m_script; | 92 | Script * m_script; |
92 | }; | 93 | }; |
93 | 94 | ||
94 | #endif | 95 | #endif |
diff --git a/noncore/apps/opie-console/mainwindow.cpp b/noncore/apps/opie-console/mainwindow.cpp index d221715..01468ca 100644 --- a/noncore/apps/opie-console/mainwindow.cpp +++ b/noncore/apps/opie-console/mainwindow.cpp | |||
@@ -1,67 +1,69 @@ | |||
1 | #include <assert.h> | 1 | #include <assert.h> |
2 | 2 | ||
3 | #include <qaction.h> | 3 | #include <qaction.h> |
4 | #include <qmenubar.h> | 4 | #include <qmenubar.h> |
5 | #include <qlabel.h> | 5 | #include <qlabel.h> |
6 | #include <qpopupmenu.h> | 6 | #include <qpopupmenu.h> |
7 | #include <qtoolbar.h> | 7 | #include <qtoolbar.h> |
8 | #include <qmessagebox.h> | 8 | #include <qmessagebox.h> |
9 | #include <qpushbutton.h> | 9 | #include <qpushbutton.h> |
10 | #include <qwhatsthis.h> | 10 | #include <qwhatsthis.h> |
11 | #include <qfileinfo.h> | 11 | #include <qfileinfo.h> |
12 | #include <qtextstream.h> | ||
12 | 13 | ||
13 | #include <qpe/resource.h> | 14 | #include <qpe/resource.h> |
14 | #include <qpe/qpeapplication.h> | 15 | #include <qpe/qpeapplication.h> |
15 | #include <qpe/filemanager.h> | 16 | #include <qpe/filemanager.h> |
16 | #include <qpe/mimetype.h> | 17 | #include <qpe/mimetype.h> |
17 | 18 | ||
18 | #include <opie/ofiledialog.h> | 19 | #include <opie/ofiledialog.h> |
19 | 20 | ||
21 | #include "TEmulation.h" | ||
20 | #include "keytrans.h" | 22 | #include "keytrans.h" |
21 | #include "profileeditordialog.h" | 23 | #include "profileeditordialog.h" |
22 | #include "configdialog.h" | 24 | #include "configdialog.h" |
23 | #include "default.h" | 25 | #include "default.h" |
24 | #include "metafactory.h" | 26 | #include "metafactory.h" |
25 | #include "profile.h" | 27 | #include "profile.h" |
26 | #include "profilemanager.h" | 28 | #include "profilemanager.h" |
27 | #include "mainwindow.h" | 29 | #include "mainwindow.h" |
28 | #include "tabwidget.h" | 30 | #include "tabwidget.h" |
29 | #include "transferdialog.h" | 31 | #include "transferdialog.h" |
30 | #include "function_keyboard.h" | 32 | #include "function_keyboard.h" |
31 | #include "emulation_handler.h" | 33 | #include "emulation_handler.h" |
32 | #include "script.h" | 34 | #include "script.h" |
33 | 35 | ||
34 | static char * filesave_xpm[] = { | 36 | static char * filesave_xpm[] = { |
35 | "16 16 78 1", | 37 | "16 16 78 1", |
36 | " c None", | 38 | " c None", |
37 | ". c #343434", | 39 | ". c #343434", |
38 | "+ c #A0A0A0", | 40 | "+ c #A0A0A0", |
39 | "@ c #565656", | 41 | "@ c #565656", |
40 | "# c #9E9E9E", | 42 | "# c #9E9E9E", |
41 | "$ c #525252", | 43 | "$ c #525252", |
42 | "% c #929292", | 44 | "% c #929292", |
43 | "& c #676767", | 45 | "& c #676767", |
44 | "* c #848484", | 46 | "* c #848484", |
45 | "= c #666666", | 47 | "= c #666666", |
46 | "- c #D8D8D8", | 48 | "- c #D8D8D8", |
47 | "; c #FFFFFF", | 49 | "; c #FFFFFF", |
48 | "> c #DBDBDB", | 50 | "> c #DBDBDB", |
49 | ", c #636363", | 51 | ", c #636363", |
50 | "' c #989898", | 52 | "' c #989898", |
51 | ") c #2D2D2D", | 53 | ") c #2D2D2D", |
52 | "! c #909090", | 54 | "! c #909090", |
53 | "~ c #AEAEAE", | 55 | "~ c #AEAEAE", |
54 | "{ c #EAEAEA", | 56 | "{ c #EAEAEA", |
55 | "] c #575757", | 57 | "] c #575757", |
56 | "^ c #585858", | 58 | "^ c #585858", |
57 | "/ c #8A8A8A", | 59 | "/ c #8A8A8A", |
58 | "( c #828282", | 60 | "( c #828282", |
59 | "_ c #6F6F6F", | 61 | "_ c #6F6F6F", |
60 | ": c #C9C9C9", | 62 | ": c #C9C9C9", |
61 | "< c #050505", | 63 | "< c #050505", |
62 | "[ c #292929", | 64 | "[ c #292929", |
63 | "} c #777777", | 65 | "} c #777777", |
64 | "| c #616161", | 66 | "| c #616161", |
65 | "1 c #3A3A3A", | 67 | "1 c #3A3A3A", |
66 | "2 c #BEBEBE", | 68 | "2 c #BEBEBE", |
67 | "3 c #2C2C2C", | 69 | "3 c #2C2C2C", |
@@ -196,158 +198,164 @@ void MainWindow::initUI() { | |||
196 | m_console->insertSeparator(); | 198 | m_console->insertSeparator(); |
197 | 199 | ||
198 | /* | 200 | /* |
199 | * connect action | 201 | * connect action |
200 | */ | 202 | */ |
201 | m_connect = new QAction( tr("Connect"), Resource::loadPixmap("console/connected"), | 203 | m_connect = new QAction( tr("Connect"), Resource::loadPixmap("console/connected"), |
202 | QString::null, 0, this, 0 ); | 204 | QString::null, 0, this, 0 ); |
203 | m_connect->addTo( m_console ); | 205 | m_connect->addTo( m_console ); |
204 | connect(m_connect, SIGNAL(activated() ), | 206 | connect(m_connect, SIGNAL(activated() ), |
205 | this, SLOT(slotConnect() ) ); | 207 | this, SLOT(slotConnect() ) ); |
206 | 208 | ||
207 | /* | 209 | /* |
208 | * disconnect action | 210 | * disconnect action |
209 | */ | 211 | */ |
210 | m_disconnect = new QAction( tr("Disconnect"), Resource::loadPixmap("console/notconnected"), | 212 | m_disconnect = new QAction( tr("Disconnect"), Resource::loadPixmap("console/notconnected"), |
211 | QString::null, 0, this, 0 ); | 213 | QString::null, 0, this, 0 ); |
212 | m_disconnect->addTo( m_console ); | 214 | m_disconnect->addTo( m_console ); |
213 | connect(m_disconnect, SIGNAL(activated() ), | 215 | connect(m_disconnect, SIGNAL(activated() ), |
214 | this, SLOT(slotDisconnect() ) ); | 216 | this, SLOT(slotDisconnect() ) ); |
215 | 217 | ||
216 | m_console->insertSeparator(); | 218 | m_console->insertSeparator(); |
217 | 219 | ||
218 | m_transfer = new QAction( tr("Transfer file..."), Resource::loadPixmap("pass") , QString::null, | 220 | m_transfer = new QAction( tr("Transfer file..."), Resource::loadPixmap("pass") , QString::null, |
219 | 0, this, 0 ); | 221 | 0, this, 0 ); |
220 | m_transfer->addTo( m_console ); | 222 | m_transfer->addTo( m_console ); |
221 | connect(m_transfer, SIGNAL(activated() ), | 223 | connect(m_transfer, SIGNAL(activated() ), |
222 | this, SLOT(slotTransfer() ) ); | 224 | this, SLOT(slotTransfer() ) ); |
223 | 225 | ||
224 | /* | 226 | /* |
225 | * immediate change of line wrap policy | 227 | * immediate change of line wrap policy |
226 | */ | 228 | */ |
227 | m_isWrapped = false; | 229 | m_isWrapped = false; |
228 | m_wrap = new QAction( tr("Line wrap"), Resource::loadPixmap( "linewrap" ), QString::null, 0, this, 0 ); | 230 | m_wrap = new QAction( tr("Line wrap"), Resource::loadPixmap( "linewrap" ), QString::null, 0, this, 0 ); |
229 | m_wrap->addTo( m_console ); | 231 | m_wrap->addTo( m_console ); |
230 | connect( m_wrap, SIGNAL( activated() ), SLOT( slotWrap() ) ); | 232 | connect( m_wrap, SIGNAL( activated() ), SLOT( slotWrap() ) ); |
231 | 233 | ||
232 | /* | 234 | /* |
233 | * fullscreen | 235 | * fullscreen |
234 | */ | 236 | */ |
235 | m_isFullscreen = false; | 237 | m_isFullscreen = false; |
236 | 238 | ||
237 | m_fullscreen = new QAction( tr("Full screen"), Resource::loadPixmap( "fullscreen" ) | 239 | m_fullscreen = new QAction( tr("Full screen"), Resource::loadPixmap( "fullscreen" ) |
238 | , QString::null, 0, this, 0); | 240 | , QString::null, 0, this, 0); |
239 | m_fullscreen->addTo( m_console ); | 241 | m_fullscreen->addTo( m_console ); |
240 | connect( m_fullscreen, SIGNAL( activated() ), | 242 | connect( m_fullscreen, SIGNAL( activated() ), |
241 | this, SLOT( slotFullscreen() ) ); | 243 | this, SLOT( slotFullscreen() ) ); |
242 | 244 | ||
243 | m_console->insertSeparator(); | 245 | m_console->insertSeparator(); |
246 | |||
247 | QAction *a = new QAction(); | ||
248 | a->setText( tr("Save history") ); | ||
249 | a->addTo( m_console ); | ||
250 | connect(a, SIGNAL(activated() ), | ||
251 | this, SLOT(slotSaveHistory() ) ); | ||
244 | /* | 252 | /* |
245 | * terminate action | 253 | * terminate action |
246 | */ | 254 | */ |
247 | m_terminate = new QAction(); | 255 | m_terminate = new QAction(); |
248 | m_terminate->setText( tr("Terminate") ); | 256 | m_terminate->setText( tr("Terminate") ); |
249 | m_terminate->addTo( m_console ); | 257 | m_terminate->addTo( m_console ); |
250 | connect(m_terminate, SIGNAL(activated() ), | 258 | connect(m_terminate, SIGNAL(activated() ), |
251 | this, SLOT(slotTerminate() ) ); | 259 | this, SLOT(slotTerminate() ) ); |
252 | 260 | ||
253 | m_closewindow = new QAction(); | 261 | m_closewindow = new QAction(); |
254 | m_closewindow->setText( tr("Close Window") ); | 262 | m_closewindow->setText( tr("Close Window") ); |
255 | m_closewindow->addTo( m_console ); | 263 | m_closewindow->addTo( m_console ); |
256 | connect( m_closewindow, SIGNAL(activated() ), | 264 | connect( m_closewindow, SIGNAL(activated() ), |
257 | this, SLOT(slotClose() ) ); | 265 | this, SLOT(slotClose() ) ); |
258 | 266 | ||
259 | 267 | ||
260 | /* | 268 | /* |
261 | * script actions | 269 | * script actions |
262 | */ | 270 | */ |
263 | m_runScript_id = m_scripts->insertItem(tr("Run Script"), m_scriptsPop, -1, 0); | 271 | m_runScript_id = m_scripts->insertItem(tr("Run Script"), m_scriptsPop, -1, 0); |
264 | connect(m_scriptsPop, SIGNAL(activated(int)), this, SLOT(slotRunScript(int))); | 272 | connect(m_scriptsPop, SIGNAL(activated(int)), this, SLOT(slotRunScript(int))); |
265 | 273 | ||
266 | m_recordScript = new QAction(tr("Record Script"), QString::null, 0, this, 0); | 274 | m_recordScript = new QAction(tr("Record Script"), QString::null, 0, this, 0); |
267 | m_recordScript->addTo(m_scripts); | 275 | m_recordScript->addTo(m_scripts); |
268 | connect(m_recordScript, SIGNAL(activated()), this, SLOT(slotRecordScript())); | 276 | connect(m_recordScript, SIGNAL(activated()), this, SLOT(slotRecordScript())); |
269 | 277 | ||
270 | m_saveScript = new QAction(tr("Save Script"), QString::null, 0, this, 0); | 278 | m_saveScript = new QAction(tr("Save Script"), QString::null, 0, this, 0); |
271 | m_saveScript->addTo(m_scripts); | 279 | m_saveScript->addTo(m_scripts); |
272 | connect(m_saveScript, SIGNAL(activated()), this, SLOT(slotSaveScript())); | 280 | connect(m_saveScript, SIGNAL(activated()), this, SLOT(slotSaveScript())); |
273 | 281 | ||
274 | 282 | ||
275 | /* | 283 | /* |
276 | * action that open/closes the keyboard | 284 | * action that open/closes the keyboard |
277 | */ | 285 | */ |
278 | m_openKeys = new QAction (tr("Open Keyboard..."), | 286 | m_openKeys = new QAction (tr("Open Keyboard..."), |
279 | Resource::loadPixmap( "console/keys/keyboard_icon" ), | 287 | Resource::loadPixmap( "console/keys/keyboard_icon" ), |
280 | QString::null, 0, this, 0); | 288 | QString::null, 0, this, 0); |
281 | m_openKeys->setToggleAction(true); | 289 | m_openKeys->setToggleAction(true); |
282 | connect (m_openKeys, SIGNAL(toggled(bool)), this, SLOT(slotOpenKeb(bool))); | 290 | connect (m_openKeys, SIGNAL(toggled(bool)), this, SLOT(slotOpenKeb(bool))); |
283 | 291 | ||
284 | /* insert the submenu */ | 292 | /* insert the submenu */ |
285 | m_console->insertItem(tr("New from Profile"), m_sessionsPop, | 293 | m_console->insertItem(tr("New from Profile"), m_sessionsPop, |
286 | -1, 0); | 294 | -1, 0); |
287 | 295 | ||
288 | /* insert the connection menu */ | 296 | /* insert the connection menu */ |
289 | m_bar->insertItem( tr("Connection"), m_console ); | 297 | m_bar->insertItem( tr("Connection"), m_console ); |
290 | 298 | ||
291 | /* the scripts menu */ | 299 | /* the scripts menu */ |
292 | m_bar->insertItem( tr("Scripts"), m_scripts ); | 300 | m_bar->insertItem( tr("Scripts"), m_scripts ); |
293 | 301 | ||
294 | /* and the keyboard */ | 302 | /* and the keyboard */ |
295 | m_keyBar = new QToolBar(this); | 303 | m_keyBar = new QToolBar(this); |
296 | addToolBar( m_keyBar, "Keyboard", QMainWindow::Top, TRUE ); | 304 | addToolBar( m_keyBar, "Keyboard", QMainWindow::Top, TRUE ); |
297 | m_keyBar->setHorizontalStretchable( TRUE ); | 305 | m_keyBar->setHorizontalStretchable( TRUE ); |
298 | m_keyBar->hide(); | 306 | m_keyBar->hide(); |
299 | 307 | ||
300 | m_kb = new FunctionKeyboard(m_keyBar); | 308 | m_kb = new FunctionKeyboard(m_keyBar); |
301 | connect(m_kb, SIGNAL(keyPressed(FKey, ushort, ushort, bool)), | 309 | connect(m_kb, SIGNAL(keyPressed(FKey, ushort, ushort, bool)), |
302 | this, SLOT(slotKeyReceived(FKey, ushort, ushort, bool))); | 310 | this, SLOT(slotKeyReceived(FKey, ushort, ushort, bool))); |
303 | 311 | ||
304 | 312 | ||
305 | QAction *a = new QAction(tr("Copy"), | 313 | a = new QAction(tr("Copy"), |
306 | Resource::loadPixmap("copy"), QString::null, | 314 | Resource::loadPixmap("copy"), QString::null, |
307 | 0, this, 0 ); | 315 | 0, this, 0 ); |
308 | //a->addTo( m_icons ); | 316 | //a->addTo( m_icons ); |
309 | connect( a, SIGNAL(activated() ), | 317 | connect( a, SIGNAL(activated() ), |
310 | this, SLOT(slotCopy() ) ); | 318 | this, SLOT(slotCopy() ) ); |
311 | 319 | ||
312 | QAction *paste = new QAction(tr("Paste"), | 320 | QAction *paste = new QAction(tr("Paste"), |
313 | Resource::loadPixmap("paste"), QString::null, | 321 | Resource::loadPixmap("paste"), QString::null, |
314 | 0, this, 0 ); | 322 | 0, this, 0 ); |
315 | connect( paste, SIGNAL(activated() ), | 323 | connect( paste, SIGNAL(activated() ), |
316 | this, SLOT(slotPaste() ) ); | 324 | this, SLOT(slotPaste() ) ); |
317 | 325 | ||
318 | 326 | ||
319 | newCon->addTo( m_icons ); | 327 | newCon->addTo( m_icons ); |
320 | m_setProfiles->addTo( m_icons ); | 328 | m_setProfiles->addTo( m_icons ); |
321 | paste->addTo( m_icons ); | 329 | paste->addTo( m_icons ); |
322 | m_openKeys->addTo(m_icons); | 330 | m_openKeys->addTo(m_icons); |
323 | m_fullscreen->addTo( m_icons ); | 331 | m_fullscreen->addTo( m_icons ); |
324 | 332 | ||
325 | m_connect->setEnabled( false ); | 333 | m_connect->setEnabled( false ); |
326 | m_disconnect->setEnabled( false ); | 334 | m_disconnect->setEnabled( false ); |
327 | m_terminate->setEnabled( false ); | 335 | m_terminate->setEnabled( false ); |
328 | m_transfer->setEnabled( false ); | 336 | m_transfer->setEnabled( false ); |
329 | m_scripts->setItemEnabled(m_runScript_id, false); | 337 | m_scripts->setItemEnabled(m_runScript_id, false); |
330 | m_recordScript->setEnabled( false ); | 338 | m_recordScript->setEnabled( false ); |
331 | m_saveScript->setEnabled( false ); | 339 | m_saveScript->setEnabled( false ); |
332 | m_fullscreen->setEnabled( false ); | 340 | m_fullscreen->setEnabled( false ); |
333 | m_closewindow->setEnabled( false ); | 341 | m_closewindow->setEnabled( false ); |
334 | m_wrap->setEnabled( false ); | 342 | m_wrap->setEnabled( false ); |
335 | 343 | ||
336 | /* | 344 | /* |
337 | * connect to the menu activation | 345 | * connect to the menu activation |
338 | */ | 346 | */ |
339 | connect( m_sessionsPop, SIGNAL(activated( int ) ), | 347 | connect( m_sessionsPop, SIGNAL(activated( int ) ), |
340 | this, SLOT(slotProfile( int ) ) ); | 348 | this, SLOT(slotProfile( int ) ) ); |
341 | 349 | ||
342 | m_consoleWindow = new TabWidget( this, "blah"); | 350 | m_consoleWindow = new TabWidget( this, "blah"); |
343 | connect(m_consoleWindow, SIGNAL(activated(Session*) ), | 351 | connect(m_consoleWindow, SIGNAL(activated(Session*) ), |
344 | this, SLOT(slotSessionChanged(Session*) ) ); | 352 | this, SLOT(slotSessionChanged(Session*) ) ); |
345 | setCentralWidget( m_consoleWindow ); | 353 | setCentralWidget( m_consoleWindow ); |
346 | 354 | ||
347 | } | 355 | } |
348 | 356 | ||
349 | ProfileManager* MainWindow::manager() { | 357 | ProfileManager* MainWindow::manager() { |
350 | return m_manager; | 358 | return m_manager; |
351 | } | 359 | } |
352 | TabWidget* MainWindow::tabWidget() { | 360 | TabWidget* MainWindow::tabWidget() { |
353 | return m_consoleWindow; | 361 | return m_consoleWindow; |
@@ -723,48 +731,73 @@ void MainWindow::slotFullscreen() { | |||
723 | ( ( m_curSession->emulationHandler() )->cornerButton() )->show(); | 731 | ( ( m_curSession->emulationHandler() )->cornerButton() )->show(); |
724 | 732 | ||
725 | connect( ( m_curSession->emulationHandler() )->cornerButton(), SIGNAL( pressed() ), this, SLOT( slotFullscreen() ) ); | 733 | connect( ( m_curSession->emulationHandler() )->cornerButton(), SIGNAL( pressed() ), this, SLOT( slotFullscreen() ) ); |
726 | } | 734 | } |
727 | 735 | ||
728 | m_isFullscreen = !m_isFullscreen; | 736 | m_isFullscreen = !m_isFullscreen; |
729 | } | 737 | } |
730 | 738 | ||
731 | 739 | ||
732 | void MainWindow::slotKeyReceived(FKey k, ushort, ushort, bool pressed) { | 740 | void MainWindow::slotKeyReceived(FKey k, ushort, ushort, bool pressed) { |
733 | 741 | ||
734 | if ( m_curSession ) { | 742 | if ( m_curSession ) { |
735 | 743 | ||
736 | QEvent::Type state; | 744 | QEvent::Type state; |
737 | 745 | ||
738 | if (pressed) state = QEvent::KeyPress; | 746 | if (pressed) state = QEvent::KeyPress; |
739 | else state = QEvent::KeyRelease; | 747 | else state = QEvent::KeyRelease; |
740 | 748 | ||
741 | QKeyEvent ke(state, k.qcode, k.unicode, 0, QString(QChar(k.unicode))); | 749 | QKeyEvent ke(state, k.qcode, k.unicode, 0, QString(QChar(k.unicode))); |
742 | 750 | ||
743 | // is this the best way to do this? cant figure out any other way to work | 751 | // is this the best way to do this? cant figure out any other way to work |
744 | QApplication::sendEvent((QObject *)m_curSession->widget(), &ke); | 752 | QApplication::sendEvent((QObject *)m_curSession->widget(), &ke); |
745 | ke.ignore(); | 753 | ke.ignore(); |
746 | } | 754 | } |
747 | } | 755 | } |
748 | void MainWindow::slotCopy() { | 756 | void MainWindow::slotCopy() { |
749 | if (!currentSession() ) return; | 757 | if (!currentSession() ) return; |
750 | currentSession()->emulationHandler()->copy(); | 758 | currentSession()->emulationHandler()->copy(); |
751 | } | 759 | } |
752 | void MainWindow::slotPaste() { | 760 | void MainWindow::slotPaste() { |
753 | if (!currentSession() ) return; | 761 | if (!currentSession() ) return; |
754 | currentSession()->emulationHandler()->paste(); | 762 | currentSession()->emulationHandler()->paste(); |
755 | } | 763 | } |
756 | 764 | ||
757 | /* | 765 | /* |
758 | * Save the session | 766 | * Save the session |
759 | */ | 767 | */ |
760 | 768 | ||
761 | void MainWindow::slotSaveSession() { | 769 | void MainWindow::slotSaveSession() { |
762 | if (!currentSession() ) { | 770 | if (!currentSession() ) { |
763 | QMessageBox::information(this, tr("Save Connection"), | 771 | QMessageBox::information(this, tr("Save Connection"), |
764 | tr("<qt>There is no Connection.</qt>"), 1 ); | 772 | tr("<qt>There is no Connection.</qt>"), 1 ); |
765 | return; | 773 | return; |
766 | } | 774 | } |
767 | manager()->add( currentSession()->profile() ); | 775 | manager()->add( currentSession()->profile() ); |
768 | manager()->save(); | 776 | manager()->save(); |
769 | populateProfiles(); | 777 | populateProfiles(); |
770 | } | 778 | } |
779 | void MainWindow::slotSaveHistory() { | ||
780 | QMap<QString, QStringList> map; | ||
781 | QStringList text; | ||
782 | text << "text/plain"; | ||
783 | map.insert(tr("History"), text ); | ||
784 | QString filename = OFileDialog::getSaveFileName(2, QPEApplication::documentDir(), QString::null, map); | ||
785 | if (filename.isEmpty() ) return; | ||
786 | |||
787 | QFileInfo info(filename); | ||
788 | |||
789 | DocLnk nf; | ||
790 | nf.setType("text/plain"); | ||
791 | nf.setFile(filename); | ||
792 | nf.setName(info.fileName()); | ||
793 | |||
794 | |||
795 | QFile file(filename); | ||
796 | file.open(IO_WriteOnly ); | ||
797 | QTextStream str(&file ); | ||
798 | if ( currentSession() ) | ||
799 | currentSession()->emulationHandler()->emulation()->streamHistory(&str); | ||
800 | |||
801 | file.close(); | ||
802 | nf.writeLink(); | ||
803 | } | ||
diff --git a/noncore/apps/opie-console/mainwindow.h b/noncore/apps/opie-console/mainwindow.h index 37219c5..0fac38b 100644 --- a/noncore/apps/opie-console/mainwindow.h +++ b/noncore/apps/opie-console/mainwindow.h | |||
@@ -25,96 +25,97 @@ class DocLnk; | |||
25 | 25 | ||
26 | class MainWindow : public QMainWindow { | 26 | class MainWindow : public QMainWindow { |
27 | Q_OBJECT | 27 | Q_OBJECT |
28 | public: | 28 | public: |
29 | MainWindow( QWidget *parent = 0, const char *name = 0, WFlags fl = 0 ); | 29 | MainWindow( QWidget *parent = 0, const char *name = 0, WFlags fl = 0 ); |
30 | ~MainWindow(); | 30 | ~MainWindow(); |
31 | 31 | ||
32 | /** | 32 | /** |
33 | * our factory to generate IOLayer and so on | 33 | * our factory to generate IOLayer and so on |
34 | * | 34 | * |
35 | */ | 35 | */ |
36 | MetaFactory* factory(); | 36 | MetaFactory* factory(); |
37 | 37 | ||
38 | /** | 38 | /** |
39 | * A session contains a QWidget*, | 39 | * A session contains a QWidget*, |
40 | * an IOLayer* and some infos for us | 40 | * an IOLayer* and some infos for us |
41 | */ | 41 | */ |
42 | Session* currentSession(); | 42 | Session* currentSession(); |
43 | 43 | ||
44 | /** | 44 | /** |
45 | * the session list | 45 | * the session list |
46 | */ | 46 | */ |
47 | QList<Session> sessions(); | 47 | QList<Session> sessions(); |
48 | 48 | ||
49 | /** | 49 | /** |
50 | * | 50 | * |
51 | */ | 51 | */ |
52 | ProfileManager* manager(); | 52 | ProfileManager* manager(); |
53 | TabWidget* tabWidget(); | 53 | TabWidget* tabWidget(); |
54 | 54 | ||
55 | private slots: | 55 | private slots: |
56 | void slotNew(); | 56 | void slotNew(); |
57 | void slotConnect(); | 57 | void slotConnect(); |
58 | void slotDisconnect(); | 58 | void slotDisconnect(); |
59 | void slotTerminate(); | 59 | void slotTerminate(); |
60 | void slotConfigure(); | 60 | void slotConfigure(); |
61 | void slotClose(); | 61 | void slotClose(); |
62 | void slotProfile(int); | 62 | void slotProfile(int); |
63 | void slotTransfer(); | 63 | void slotTransfer(); |
64 | void slotOpenKeb(bool); | 64 | void slotOpenKeb(bool); |
65 | void slotOpenButtons(bool); | 65 | void slotOpenButtons(bool); |
66 | void slotRecordScript(); | 66 | void slotRecordScript(); |
67 | void slotSaveScript(); | 67 | void slotSaveScript(); |
68 | void slotRunScript(int); | 68 | void slotRunScript(int); |
69 | void slotFullscreen(); | 69 | void slotFullscreen(); |
70 | void slotWrap(); | 70 | void slotWrap(); |
71 | void slotSessionChanged( Session* ); | 71 | void slotSessionChanged( Session* ); |
72 | void slotKeyReceived(FKey, ushort, ushort, bool); | 72 | void slotKeyReceived(FKey, ushort, ushort, bool); |
73 | void slotSaveHistory(); | ||
73 | 74 | ||
74 | /* what could these both slot do? */ | 75 | /* what could these both slot do? */ |
75 | void slotCopy(); | 76 | void slotCopy(); |
76 | void slotPaste(); | 77 | void slotPaste(); |
77 | 78 | ||
78 | /* save the currentSession() to Profiles */ | 79 | /* save the currentSession() to Profiles */ |
79 | void slotSaveSession(); | 80 | void slotSaveSession(); |
80 | 81 | ||
81 | private: | 82 | private: |
82 | void initUI(); | 83 | void initUI(); |
83 | void populateProfiles(); | 84 | void populateProfiles(); |
84 | void populateScripts(); | 85 | void populateScripts(); |
85 | void create( const Profile& ); | 86 | void create( const Profile& ); |
86 | /** | 87 | /** |
87 | * the current session | 88 | * the current session |
88 | */ | 89 | */ |
89 | Session* m_curSession; | 90 | Session* m_curSession; |
90 | 91 | ||
91 | /** | 92 | /** |
92 | * the session list | 93 | * the session list |
93 | */ | 94 | */ |
94 | QList<Session> m_sessions; | 95 | QList<Session> m_sessions; |
95 | QList<DocLnk> m_scriptsData; | 96 | QList<DocLnk> m_scriptsData; |
96 | 97 | ||
97 | /** | 98 | /** |
98 | * the metafactory | 99 | * the metafactory |
99 | */ | 100 | */ |
100 | MetaFactory* m_factory; | 101 | MetaFactory* m_factory; |
101 | ProfileManager* m_manager; | 102 | ProfileManager* m_manager; |
102 | 103 | ||
103 | TabWidget* m_consoleWindow; | 104 | TabWidget* m_consoleWindow; |
104 | QToolBar* m_tool; | 105 | QToolBar* m_tool; |
105 | QToolBar* m_icons; | 106 | QToolBar* m_icons; |
106 | QToolBar* m_keyBar; | 107 | QToolBar* m_keyBar; |
107 | QToolBar* m_buttonBar; | 108 | QToolBar* m_buttonBar; |
108 | QMenuBar* m_bar; | 109 | QMenuBar* m_bar; |
109 | QPopupMenu* m_console; | 110 | QPopupMenu* m_console; |
110 | QPopupMenu* m_sessionsPop; | 111 | QPopupMenu* m_sessionsPop; |
111 | QPopupMenu* m_scriptsPop; | 112 | QPopupMenu* m_scriptsPop; |
112 | QPopupMenu* m_scripts; | 113 | QPopupMenu* m_scripts; |
113 | QAction* m_connect; | 114 | QAction* m_connect; |
114 | QAction* m_disconnect; | 115 | QAction* m_disconnect; |
115 | QAction* m_terminate; | 116 | QAction* m_terminate; |
116 | QAction* m_transfer; | 117 | QAction* m_transfer; |
117 | QAction* m_setProfiles; | 118 | QAction* m_setProfiles; |
118 | QAction* m_openKeys; | 119 | QAction* m_openKeys; |
119 | QAction* m_openButtons; | 120 | QAction* m_openButtons; |
120 | QAction* m_recordScript; | 121 | QAction* m_recordScript; |
diff --git a/noncore/apps/opie-console/metafactory.cpp b/noncore/apps/opie-console/metafactory.cpp index 0b43e17..24928e7 100644 --- a/noncore/apps/opie-console/metafactory.cpp +++ b/noncore/apps/opie-console/metafactory.cpp | |||
@@ -1,190 +1,165 @@ | |||
1 | #include <qpe/config.h> | 1 | #include <qpe/config.h> |
2 | #include "metafactory.h" | 2 | #include "metafactory.h" |
3 | 3 | ||
4 | MetaFactory::MetaFactory() { | 4 | MetaFactory::MetaFactory() { |
5 | } | 5 | } |
6 | MetaFactory::~MetaFactory() { | 6 | MetaFactory::~MetaFactory() { |
7 | 7 | ||
8 | } | 8 | } |
9 | void MetaFactory::addConnectionWidgetFactory( const QCString& name, | 9 | void MetaFactory::addConnectionWidgetFactory( const QCString& name, |
10 | const QString& str, | 10 | const QString& str, |
11 | configWidget wid) { | 11 | configWidget wid) { |
12 | m_strings.insert( str, name ); | 12 | m_strings.insert( str, name ); |
13 | m_conFact.insert( str, wid ); | 13 | m_conFact.insert( str, wid ); |
14 | } | 14 | } |
15 | void MetaFactory::addTerminalWidgetFactory( const QCString& name, | 15 | void MetaFactory::addTerminalWidgetFactory( const QCString& name, |
16 | const QString& str, | 16 | const QString& str, |
17 | configWidget wid ) { | 17 | configWidget wid ) { |
18 | m_strings.insert( str, name ); | 18 | m_strings.insert( str, name ); |
19 | m_termFact.insert( str, wid ); | 19 | m_termFact.insert( str, wid ); |
20 | } | 20 | } |
21 | void MetaFactory::addKeyboardWidgetFactory( const QCString& name, | 21 | void MetaFactory::addKeyboardWidgetFactory( const QCString& name, |
22 | const QString & str, | 22 | const QString & str, |
23 | configWidget wid) { | 23 | configWidget wid) { |
24 | m_strings.insert( str, name ); | 24 | m_strings.insert( str, name ); |
25 | m_keyFact.insert( str, wid ); | 25 | m_keyFact.insert( str, wid ); |
26 | 26 | ||
27 | } | 27 | } |
28 | void MetaFactory::addIOLayerFactory( const QCString& name, | 28 | void MetaFactory::addIOLayerFactory( const QCString& name, |
29 | const QString& str, | 29 | const QString& str, |
30 | iolayer lay) { | 30 | iolayer lay) { |
31 | m_strings.insert( str, name ); | 31 | m_strings.insert( str, name ); |
32 | m_layerFact.insert( str, lay ); | 32 | m_layerFact.insert( str, lay ); |
33 | } | 33 | } |
34 | void MetaFactory::addFileTransferLayer( const QCString& name, | 34 | void MetaFactory::addFileTransferLayer( const QCString& name, |
35 | const QString& str, | 35 | const QString& str, |
36 | filelayer lay) { | 36 | filelayer lay) { |
37 | m_strings.insert(str, name ); | 37 | m_strings.insert(str, name ); |
38 | m_fileFact.insert( str, lay ); | 38 | m_fileFact.insert( str, lay ); |
39 | } | 39 | } |
40 | void MetaFactory::addReceiveLayer( const QCString& name, | 40 | void MetaFactory::addReceiveLayer( const QCString& name, |
41 | const QString& str, | 41 | const QString& str, |
42 | receivelayer lay) { | 42 | receivelayer lay) { |
43 | m_strings.insert(str, name ); | 43 | m_strings.insert(str, name ); |
44 | m_receiveFact.insert( str, lay ); | 44 | m_receiveFact.insert( str, lay ); |
45 | } | 45 | } |
46 | void MetaFactory::addEmulationLayer( const QCString& name, | ||
47 | const QString& str, | ||
48 | emulationLayer em) { | ||
49 | m_strings.insert(str, name ); | ||
50 | m_emu.insert( str, em ); | ||
51 | } | ||
52 | QStringList MetaFactory::ioLayers()const { | 46 | QStringList MetaFactory::ioLayers()const { |
53 | QStringList list; | 47 | QStringList list; |
54 | QMap<QString, iolayer>::ConstIterator it; | 48 | QMap<QString, iolayer>::ConstIterator it; |
55 | for (it = m_layerFact.begin(); it != m_layerFact.end(); ++it ) { | 49 | for (it = m_layerFact.begin(); it != m_layerFact.end(); ++it ) { |
56 | list << it.key(); | 50 | list << it.key(); |
57 | } | 51 | } |
58 | return list; | 52 | return list; |
59 | } | 53 | } |
60 | QStringList MetaFactory::connectionWidgets()const { | 54 | QStringList MetaFactory::connectionWidgets()const { |
61 | QStringList list; | 55 | QStringList list; |
62 | QMap<QString, configWidget>::ConstIterator it; | 56 | QMap<QString, configWidget>::ConstIterator it; |
63 | for ( it = m_conFact.begin(); it != m_conFact.end(); ++it ) { | 57 | for ( it = m_conFact.begin(); it != m_conFact.end(); ++it ) { |
64 | list << it.key(); | 58 | list << it.key(); |
65 | } | 59 | } |
66 | return list; | 60 | return list; |
67 | } | 61 | } |
68 | QStringList MetaFactory::terminalWidgets()const { | 62 | QStringList MetaFactory::terminalWidgets()const { |
69 | QStringList list; | 63 | QStringList list; |
70 | QMap<QString, configWidget>::ConstIterator it; | 64 | QMap<QString, configWidget>::ConstIterator it; |
71 | for ( it = m_termFact.begin(); it != m_termFact.end(); ++it ) { | 65 | for ( it = m_termFact.begin(); it != m_termFact.end(); ++it ) { |
72 | list << it.key(); | 66 | list << it.key(); |
73 | } | 67 | } |
74 | return list; | 68 | return list; |
75 | } | 69 | } |
76 | QStringList MetaFactory::fileTransferLayers()const { | 70 | QStringList MetaFactory::fileTransferLayers()const { |
77 | QStringList list; | 71 | QStringList list; |
78 | QMap<QString, filelayer>::ConstIterator it; | 72 | QMap<QString, filelayer>::ConstIterator it; |
79 | for ( it = m_fileFact.begin(); it != m_fileFact.end(); ++it ) { | 73 | for ( it = m_fileFact.begin(); it != m_fileFact.end(); ++it ) { |
80 | list << it.key(); | 74 | list << it.key(); |
81 | } | 75 | } |
82 | return list; | 76 | return list; |
83 | } | 77 | } |
84 | QStringList MetaFactory::receiveLayers()const { | 78 | QStringList MetaFactory::receiveLayers()const { |
85 | QStringList list; | 79 | QStringList list; |
86 | QMap<QString, receivelayer>::ConstIterator it; | 80 | QMap<QString, receivelayer>::ConstIterator it; |
87 | for ( it = m_receiveFact.begin(); it != m_receiveFact.end(); ++it ) { | 81 | for ( it = m_receiveFact.begin(); it != m_receiveFact.end(); ++it ) { |
88 | list << it.key(); | 82 | list << it.key(); |
89 | } | 83 | } |
90 | return list; | 84 | return list; |
91 | } | 85 | } |
92 | QStringList MetaFactory::emulationLayers()const { | ||
93 | QStringList list; | ||
94 | QMap<QString, emulationLayer>::ConstIterator it; | ||
95 | for ( it = m_emu.begin(); it != m_emu.end(); ++it ) { | ||
96 | list << it.key(); | ||
97 | } | ||
98 | return list; | ||
99 | } | ||
100 | 86 | ||
101 | IOLayer* MetaFactory::newIOLayer( const QString& str,const Profile& prof ) { | 87 | IOLayer* MetaFactory::newIOLayer( const QString& str,const Profile& prof ) { |
102 | IOLayer* lay = 0l; | 88 | IOLayer* lay = 0l; |
103 | 89 | ||
104 | QMap<QString, iolayer>::Iterator it; | 90 | QMap<QString, iolayer>::Iterator it; |
105 | it = m_layerFact.find( str ); | 91 | it = m_layerFact.find( str ); |
106 | if ( it != m_layerFact.end() ) { | 92 | if ( it != m_layerFact.end() ) { |
107 | lay = (*(it.data()))(prof); | 93 | lay = (*(it.data()))(prof); |
108 | /* | 94 | /* |
109 | iolayer laye = it.data(); | 95 | iolayer laye = it.data(); |
110 | lay = (*laye )(conf);*/ | 96 | lay = (*laye )(conf);*/ |
111 | } | 97 | } |
112 | 98 | ||
113 | return lay; | 99 | return lay; |
114 | } | 100 | } |
115 | 101 | ||
116 | ProfileDialogWidget *MetaFactory::newConnectionPlugin ( const QString& str, QWidget *parent) { | 102 | ProfileDialogWidget *MetaFactory::newConnectionPlugin ( const QString& str, QWidget *parent) { |
117 | ProfileDialogWidget* wid = 0l; | 103 | ProfileDialogWidget* wid = 0l; |
118 | 104 | ||
119 | QMap<QString, configWidget>::Iterator it; | 105 | QMap<QString, configWidget>::Iterator it; |
120 | it = m_conFact.find( str ); | 106 | it = m_conFact.find( str ); |
121 | if ( it != m_conFact.end() ) { | 107 | if ( it != m_conFact.end() ) { |
122 | wid = (*(it.data() ) )(str,parent); | 108 | wid = (*(it.data() ) )(str,parent); |
123 | } | 109 | } |
124 | return wid; | 110 | return wid; |
125 | } | 111 | } |
126 | ProfileDialogWidget *MetaFactory::newTerminalPlugin( const QString& str, QWidget *parent) { | 112 | ProfileDialogWidget *MetaFactory::newTerminalPlugin( const QString& str, QWidget *parent) { |
127 | if (str.isEmpty() ) | 113 | if (str.isEmpty() ) |
128 | return 0l; | 114 | return 0l; |
129 | ProfileDialogWidget* wid = 0l; | 115 | ProfileDialogWidget* wid = 0l; |
130 | 116 | ||
131 | QMap<QString, configWidget>::Iterator it; | 117 | QMap<QString, configWidget>::Iterator it; |
132 | it = m_termFact.find( str ); | 118 | it = m_termFact.find( str ); |
133 | if ( it != m_termFact.end() ) { | 119 | if ( it != m_termFact.end() ) { |
134 | wid = (*(it.data() ) )(str,parent); | 120 | wid = (*(it.data() ) )(str,parent); |
135 | } | 121 | } |
136 | return wid; | 122 | return wid; |
137 | } | 123 | } |
138 | ProfileDialogWidget *MetaFactory::newKeyboardPlugin( const QString& str, QWidget *parent) { | 124 | ProfileDialogWidget *MetaFactory::newKeyboardPlugin( const QString& str, QWidget *parent) { |
139 | 125 | ||
140 | if (str.isEmpty() ) | 126 | if (str.isEmpty() ) |
141 | return 0l; | 127 | return 0l; |
142 | ProfileDialogWidget* wid = 0l; | 128 | ProfileDialogWidget* wid = 0l; |
143 | 129 | ||
144 | QMap<QString, configWidget>::Iterator it; | 130 | QMap<QString, configWidget>::Iterator it; |
145 | it = m_keyFact.find( str ); | 131 | it = m_keyFact.find( str ); |
146 | if ( it != m_keyFact.end() ) { | 132 | if ( it != m_keyFact.end() ) { |
147 | wid = (*(it.data() ) )(str,parent); | 133 | wid = (*(it.data() ) )(str,parent); |
148 | } | 134 | } |
149 | return wid; | 135 | return wid; |
150 | } | 136 | } |
151 | EmulationLayer* MetaFactory::newEmulationLayer( const QString& str, WidgetLayer* wid) { | ||
152 | EmulationLayer* lay = 0l; | ||
153 | |||
154 | QMap<QString, emulationLayer>::Iterator it; | ||
155 | it = m_emu.find( str ); | ||
156 | if ( it != m_emu.end() ) { | ||
157 | lay = (*(it.data() ) )(wid); | ||
158 | } | ||
159 | |||
160 | return lay; | ||
161 | } | ||
162 | FileTransferLayer* MetaFactory::newFileTransfer(const QString& str, IOLayer* lay ) { | 137 | FileTransferLayer* MetaFactory::newFileTransfer(const QString& str, IOLayer* lay ) { |
163 | FileTransferLayer* file = 0l; | 138 | FileTransferLayer* file = 0l; |
164 | QMap<QString, filelayer>::Iterator it; | 139 | QMap<QString, filelayer>::Iterator it; |
165 | it = m_fileFact.find( str ); | 140 | it = m_fileFact.find( str ); |
166 | if ( it != m_fileFact.end() ) { | 141 | if ( it != m_fileFact.end() ) { |
167 | file = (*(it.data() ) )(lay); | 142 | file = (*(it.data() ) )(lay); |
168 | } | 143 | } |
169 | return file; | 144 | return file; |
170 | } | 145 | } |
171 | ReceiveLayer* MetaFactory::newReceive(const QString& str, IOLayer* lay ) { | 146 | ReceiveLayer* MetaFactory::newReceive(const QString& str, IOLayer* lay ) { |
172 | ReceiveLayer* file = 0l; | 147 | ReceiveLayer* file = 0l; |
173 | QMap<QString, receivelayer>::Iterator it; | 148 | QMap<QString, receivelayer>::Iterator it; |
174 | it = m_receiveFact.find( str ); | 149 | it = m_receiveFact.find( str ); |
175 | if ( it != m_receiveFact.end() ) { | 150 | if ( it != m_receiveFact.end() ) { |
176 | file = (*(it.data() ) )(lay); | 151 | file = (*(it.data() ) )(lay); |
177 | } | 152 | } |
178 | return file; | 153 | return file; |
179 | } | 154 | } |
180 | QCString MetaFactory::internal( const QString& str )const { | 155 | QCString MetaFactory::internal( const QString& str )const { |
181 | return m_strings[str]; | 156 | return m_strings[str]; |
182 | } | 157 | } |
183 | QString MetaFactory::external( const QCString& str )const { | 158 | QString MetaFactory::external( const QCString& str )const { |
184 | QMap<QString, QCString>::ConstIterator it; | 159 | QMap<QString, QCString>::ConstIterator it; |
185 | for ( it = m_strings.begin(); it != m_strings.end(); ++it ) { | 160 | for ( it = m_strings.begin(); it != m_strings.end(); ++it ) { |
186 | if ( it.data() == str ) | 161 | if ( it.data() == str ) |
187 | return it.key(); | 162 | return it.key(); |
188 | } | 163 | } |
189 | return QString::null; | 164 | return QString::null; |
190 | } | 165 | } |
diff --git a/noncore/apps/opie-console/metafactory.h b/noncore/apps/opie-console/metafactory.h index f89136c..bcc40db 100644 --- a/noncore/apps/opie-console/metafactory.h +++ b/noncore/apps/opie-console/metafactory.h | |||
@@ -1,120 +1,109 @@ | |||
1 | #ifndef OPIE_META_FACTORY_H | 1 | #ifndef OPIE_META_FACTORY_H |
2 | #define OPIE_META_FACTORY_H | 2 | #define OPIE_META_FACTORY_H |
3 | 3 | ||
4 | /** | 4 | /** |
5 | * The MetaFactory is used to keep track of all IOLayers, FileTransferLayers and ConfigWidgets | 5 | * The MetaFactory is used to keep track of all IOLayers, FileTransferLayers and ConfigWidgets |
6 | * and to instantiate these implementations on demand | 6 | * and to instantiate these implementations on demand |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <qwidget.h> | 9 | #include <qwidget.h> |
10 | #include <qmap.h> | 10 | #include <qmap.h> |
11 | 11 | ||
12 | #include <qpe/config.h> | 12 | #include <qpe/config.h> |
13 | 13 | ||
14 | #include "io_layer.h" | 14 | #include "io_layer.h" |
15 | #include "file_layer.h" | 15 | #include "file_layer.h" |
16 | #include "receive_layer.h" | 16 | #include "receive_layer.h" |
17 | #include "profile.h" | 17 | #include "profile.h" |
18 | #include "profiledialogwidget.h" | 18 | #include "profiledialogwidget.h" |
19 | #include "emulation_layer.h" | ||
20 | 19 | ||
21 | class WidgetLayer; | 20 | class WidgetLayer; |
22 | class MetaFactory { | 21 | class MetaFactory { |
23 | public: | 22 | public: |
24 | typedef ProfileDialogWidget* (*configWidget)(const QString&, QWidget* parent); | 23 | typedef ProfileDialogWidget* (*configWidget)(const QString&, QWidget* parent); |
25 | typedef IOLayer* (*iolayer)(const Profile& ); | 24 | typedef IOLayer* (*iolayer)(const Profile& ); |
26 | typedef FileTransferLayer* (*filelayer)(IOLayer*); | 25 | typedef FileTransferLayer* (*filelayer)(IOLayer*); |
27 | typedef ReceiveLayer* (*receivelayer)(IOLayer*); | 26 | typedef ReceiveLayer* (*receivelayer)(IOLayer*); |
28 | typedef EmulationLayer* (*emulationLayer)(WidgetLayer* ); | ||
29 | 27 | ||
30 | MetaFactory(); | 28 | MetaFactory(); |
31 | ~MetaFactory(); | 29 | ~MetaFactory(); |
32 | 30 | ||
33 | /** | 31 | /** |
34 | * add a ProfileDialogWidget to the factory | 32 | * add a ProfileDialogWidget to the factory |
35 | * name is the name shown to the user | 33 | * name is the name shown to the user |
36 | */ | 34 | */ |
37 | void addConnectionWidgetFactory( const QCString& internalName, | 35 | void addConnectionWidgetFactory( const QCString& internalName, |
38 | const QString& uiString, | 36 | const QString& uiString, |
39 | configWidget ); | 37 | configWidget ); |
40 | void addTerminalWidgetFactory ( const QCString& internalName, | 38 | void addTerminalWidgetFactory ( const QCString& internalName, |
41 | const QString& name, | 39 | const QString& name, |
42 | configWidget ); | 40 | configWidget ); |
43 | void addKeyboardWidgetFactory ( const QCString& internalName, | 41 | void addKeyboardWidgetFactory ( const QCString& internalName, |
44 | const QString& name, | 42 | const QString& name, |
45 | configWidget ); | 43 | configWidget ); |
46 | 44 | ||
47 | /** | 45 | /** |
48 | * adds an IOLayer factory | 46 | * adds an IOLayer factory |
49 | */ | 47 | */ |
50 | void addIOLayerFactory( const QCString&, | 48 | void addIOLayerFactory( const QCString&, |
51 | const QString&, | 49 | const QString&, |
52 | iolayer ); | 50 | iolayer ); |
53 | 51 | ||
54 | /** | 52 | /** |
55 | * adds a FileTransfer Layer | 53 | * adds a FileTransfer Layer |
56 | */ | 54 | */ |
57 | void addFileTransferLayer( const QCString& name, | 55 | void addFileTransferLayer( const QCString& name, |
58 | const QString&, | 56 | const QString&, |
59 | filelayer ); | 57 | filelayer ); |
60 | void addReceiveLayer( const QCString& name, | 58 | void addReceiveLayer( const QCString& name, |
61 | const QString&, | 59 | const QString&, |
62 | receivelayer); | 60 | receivelayer); |
63 | 61 | ||
64 | /** | ||
65 | * adds a Factory for Emulation to the Layer.. | ||
66 | */ | ||
67 | void addEmulationLayer ( const QCString& name, | ||
68 | const QString& uiString, | ||
69 | emulationLayer ); | ||
70 | 62 | ||
71 | /* translated UI Strings */ | 63 | /* translated UI Strings */ |
72 | QStringList ioLayers()const; | 64 | QStringList ioLayers()const; |
73 | QStringList connectionWidgets()const; | 65 | QStringList connectionWidgets()const; |
74 | 66 | ||
75 | /** | 67 | /** |
76 | * Terminal Configuration widgets | 68 | * Terminal Configuration widgets |
77 | */ | 69 | */ |
78 | QStringList terminalWidgets()const; | 70 | QStringList terminalWidgets()const; |
79 | QStringList fileTransferLayers()const; | 71 | QStringList fileTransferLayers()const; |
80 | QStringList receiveLayers()const; | 72 | QStringList receiveLayers()const; |
81 | QStringList emulationLayers()const; | ||
82 | 73 | ||
83 | /** | 74 | /** |
84 | * the generation... | 75 | * the generation... |
85 | */ | 76 | */ |
86 | IOLayer* newIOLayer( const QString&,const Profile& ); | 77 | IOLayer* newIOLayer( const QString&,const Profile& ); |
87 | ProfileDialogWidget *newConnectionPlugin ( const QString&, QWidget* ); | 78 | ProfileDialogWidget *newConnectionPlugin ( const QString&, QWidget* ); |
88 | ProfileDialogWidget* newTerminalPlugin( const QString&, QWidget* ); | 79 | ProfileDialogWidget* newTerminalPlugin( const QString&, QWidget* ); |
89 | ProfileDialogWidget* newKeyboardPlugin( const QString&, QWidget* ); | 80 | ProfileDialogWidget* newKeyboardPlugin( const QString&, QWidget* ); |
90 | EmulationLayer* newEmulationLayer(const QString&, WidgetLayer* ); | ||
91 | FileTransferLayer* newFileTransfer(const QString&, IOLayer* ); | 81 | FileTransferLayer* newFileTransfer(const QString&, IOLayer* ); |
92 | ReceiveLayer* newReceive(const QString&, IOLayer* ); | 82 | ReceiveLayer* newReceive(const QString&, IOLayer* ); |
93 | 83 | ||
94 | /* | 84 | /* |
95 | * internal takes the maybe translated | 85 | * internal takes the maybe translated |
96 | * public QString and maps it to the internal | 86 | * public QString and maps it to the internal |
97 | * not translatable QCString | 87 | * not translatable QCString |
98 | */ | 88 | */ |
99 | QCString internal( const QString& )const; | 89 | QCString internal( const QString& )const; |
100 | 90 | ||
101 | /* | 91 | /* |
102 | * external takes the internal name | 92 | * external takes the internal name |
103 | * it returns a translated name | 93 | * it returns a translated name |
104 | */ | 94 | */ |
105 | QString external( const QCString& )const; | 95 | QString external( const QCString& )const; |
106 | 96 | ||
107 | 97 | ||
108 | private: | 98 | private: |
109 | QMap<QString, QCString> m_strings; | 99 | QMap<QString, QCString> m_strings; |
110 | QMap<QString, configWidget> m_conFact; | 100 | QMap<QString, configWidget> m_conFact; |
111 | QMap<QString, configWidget> m_termFact; | 101 | QMap<QString, configWidget> m_termFact; |
112 | QMap<QString, configWidget> m_keyFact; | 102 | QMap<QString, configWidget> m_keyFact; |
113 | QMap<QString, iolayer> m_layerFact; | 103 | QMap<QString, iolayer> m_layerFact; |
114 | QMap<QString, filelayer> m_fileFact; | 104 | QMap<QString, filelayer> m_fileFact; |
115 | QMap<QString, receivelayer> m_receiveFact; | 105 | QMap<QString, receivelayer> m_receiveFact; |
116 | QMap<QString, emulationLayer> m_emu; | ||
117 | }; | 106 | }; |
118 | 107 | ||
119 | 108 | ||
120 | #endif | 109 | #endif |