summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-console/opie-console.pro6
-rw-r--r--noncore/apps/opie-console/widget_layer.cpp155
-rw-r--r--noncore/apps/opie-console/widget_layer.h104
3 files changed, 246 insertions, 19 deletions
diff --git a/noncore/apps/opie-console/opie-console.pro b/noncore/apps/opie-console/opie-console.pro
index 831ca34..5c2d04e 100644
--- a/noncore/apps/opie-console/opie-console.pro
+++ b/noncore/apps/opie-console/opie-console.pro
@@ -23,3 +23,4 @@ HEADERS = io_layer.h io_serial.h \
23 screen.h \ 23 screen.h \
24 keytrans.h 24 keytrans.h \
25 widget_layer.h
25 26
@@ -42,3 +43,4 @@ SOURCES = io_layer.cpp io_serial.cpp \
42 screen.cpp \ 43 screen.cpp \
43 keytrans.cpp 44 keytrans.cpp \
45 widget_layer.cpp
44 46
diff --git a/noncore/apps/opie-console/widget_layer.cpp b/noncore/apps/opie-console/widget_layer.cpp
new file mode 100644
index 0000000..28227e4
--- a/dev/null
+++ b/noncore/apps/opie-console/widget_layer.cpp
@@ -0,0 +1,155 @@
1/* ------------------------------------------------------------------------- */
2/* */
3/* widget_layer.cpp Widget Layer */
4/* */
5/* opie developers <opie@handhelds.org> */
6/* */
7/* ------------------------------------------------------------------------- */
8
9
10
11#include "widget_layer.h"
12
13#include <qclipboard.h>
14#include <qregexp.h>
15#include <qglobal.h>
16
17#include <string.h>
18//#include <
19
20#include "common.h"
21
22
23#define loc(X,Y) ((Y)*m_columns+(X))
24
25
26WidgetLayer::WidgetLayer( QObject *parent, const char *name ) : QObject( parent, name )
27{
28 // get the clipboard
29 m_clipboard = QApplication::clipboard();
30
31 // when data on clipboard changes, clear selection
32 QObject::connect( (QObject*) m_clipboard, SIGNAL( dataChanged() ),
33 (QObject*)this, SLOT( onClearSelection() ) );
34
35 // initialize vars:
36 m_lines = 1;
37 m_columns = 1;
38 m_resizing = false;
39
40 m_image = QArray<Character>();
41}
42
43WidgetLayer::~WidgetLayer()
44{
45 // clean up!
46}
47
48/* --------------------------------- audio ---------------------------------- */
49
50void WidgetLayer::bell()
51{
52 QApplication::beep();
53}
54
55
56/* --------------------------------- screen --------------------------------- */
57
58
59void WidgetLayer::propagateSize()
60{
61 QArray<Character> oldimage = m_image;
62 int oldlines = m_lines;
63 int oldcolumns = m_columns;
64
65 makeImage();
66
67 // copy old image, to reduce flicker
68 if ( oldimage )
69 {
70 //FIXME: is it possible to do this with QArray.dublicate()?
71
72 int lins = QMIN( oldlines, m_lines );
73 int cols = QMIN( oldcolumns, m_columns );
74 for ( int lin = 0; lin < lins; ++lin )
75 {
76 memcpy( (void*) &m_image[m_columns*lin],
77 (void*) &oldimage[oldcolumns*lin],
78 cols*sizeof( Character ) );
79 }
80 //free( oldimage );
81 }
82 else
83 clearImage();
84
85 m_resizing = true;
86 emit imageSizeChanged( m_lines, m_columns );
87 m_resizing = false;
88}
89
90void WidgetLayer::makeImage()
91{
92 calcGeometry();
93 m_image = QArray<Character>();
94 clearImage();
95}
96
97void WidgetLayer::clearImage()
98{
99 //should this belong here??
100 for ( int y = 0; y < m_lines; y++ )
101 for ( int x = 0; x < m_columns; x++ )
102 {
103 m_image[loc(x,y)].c = 0xff;
104 m_image[loc(x,y)].f = 0xff;
105 m_image[loc(x,y)].b = 0xff;
106 m_image[loc(x,y)].r = 0xff;
107 }
108}
109
110/* --------------------------------- selection ------------------------------ */
111
112void WidgetLayer::pasteClipboard()
113{
114 insertSelection();
115}
116
117
118void WidgetLayer::insertSelection()
119{
120 QString text = QApplication::clipboard()->text();
121 if ( ! text.isNull() )
122 {
123 text.replace( QRegExp( "\n" ), "\r" );
124 insertText( text );
125 // selection should be unselected
126 emit selectionCleared();
127 }
128}
129
130void WidgetLayer::insertText( QString text )
131{
132 // text is inserted as key event
133 QKeyEvent e( QEvent::KeyPress, 0, -1, 0, text);
134 emit keyPressed( &e );
135}
136
137void WidgetLayer::onClearSelection()
138{
139 emit selectionCleared();
140}
141
142void WidgetLayer::setSelection( const QString& text )
143{
144 // why get the clipboard, we have it as instance var...
145 QObject *m_clipboard = QApplication::clipboard();
146
147 // we know, that cliboard changes, when we change clipboard
148 QObject::disconnect( (QObject*) m_clipboard, SIGNAL( dataChanged() ),
149 (QObject*) this, SLOT( selectionCleared() ) );
150
151 QApplication::clipboard()->setText( text );
152
153 QObject::connect( (QObject*) m_clipboard, SIGNAL( dataChanged() ),
154 (QObject*) this, SLOT( selectionCleared() ) );
155}
diff --git a/noncore/apps/opie-console/widget_layer.h b/noncore/apps/opie-console/widget_layer.h
index cf2a1e5..3cdd6aa 100644
--- a/noncore/apps/opie-console/widget_layer.h
+++ b/noncore/apps/opie-console/widget_layer.h
@@ -1,2 +1,2 @@
1 1/* -------------------------------------------------------------------------- */
2/* */ 2/* */
@@ -12,7 +12,21 @@
12 12
13#ifndef WIDGET_LAYER_H
14#define WIDGET_LAYER_H
15
16// qt includes
17#include <qapplication.h>
18#include <qtimer.h>
19#include <qkeycode.h>
20#include <qclipboard.h>
21
22
23// opie-console includes
24#include "session.h"
25#include "common.h"
13 26
14class WidgetLayer : public QObject 27class WidgetLayer : public QObject
15{ QObject 28{ Q_OBJECT
16 29
17public: 30public:
31
18 /** 32 /**
@@ -20,3 +34,3 @@ public:
20 */ 34 */
21 WidgetLayer(); 35 WidgetLayer( QObject *parent=0, const char *name=0 );
22 36
@@ -27,2 +41,3 @@ public:
27 41
42public:
28 /** 43 /**
@@ -45,13 +60,17 @@ public:
45 */ 60 */
46 int columns(){ return m_columns } 61 int columns(){ return m_columns; }
47 62
48 /** 63 /**
49 * copy selection into clipboard, etc 64 * insert current selection (currently this is only the clipboard)
50 */ 65 */
51 void emitSelection(); 66 void insertSelection();
52 67
53 /** 68 /**
69 * insert text
70 */
71 void insertText( QString text );
72 /**
54 * set selection (clipboard) to text 73 * set selection (clipboard) to text
55 */ 74 */
56 void setSelection( QString &text ) 75 void setSelection( const QString &text );
57 76
@@ -68,3 +87,3 @@ signals:
68 */ 87 */
69 keyPressed( QKeyEvent *e ); 88 void keyPressed( QKeyEvent *e );
70 89
@@ -76,3 +95,3 @@ signals:
76 */ 95 */
77 mousePressed( int button, int x, int y ); 96 void mousePressed( int button, int x, int y );
78 97
@@ -81,3 +100,3 @@ signals:
81 */ 100 */
82 imageSizeChanged( int lines, int columns ); 101 void imageSizeChanged( int lines, int columns );
83 102
@@ -86,3 +105,3 @@ signals:
86 */ 105 */
87 historyCursorChanged( int value ); 106 void historyCursorChanged( int value );
88 107
@@ -96,3 +115,3 @@ signals:
96 */ 115 */
97 void selectionBegin( const int x, const int y ) 116 void selectionBegin( const int x, const int y );
98 117
@@ -100,3 +119,3 @@ signals:
100 * selection extended 119 * selection extended
101 * (from begin s.a. to x, y) 120 * (from begin (s.a.) to x, y)
102 */ 121 */
@@ -110,3 +129,31 @@ signals:
110 129
111slots: 130
131
132// protected methods
133protected:
134
135 // image operations
136
137 /**
138 * changes image, to suit new size
139 * TODO: find meaningful name!
140 */
141 void propagateSize();
142
143 /**
144 *
145 */
146 virtual void calcGeometry();
147
148 /**
149 * makes an empty image
150 */
151 void makeImage();
152
153 /**
154 * clears the image
155 */
156 void clearImage();
157
158protected slots:
112 159
@@ -115,3 +162,4 @@ slots:
115 */ 162 */
116 onClearSelection(); 163 void onClearSelection();
164
117 165
@@ -123,8 +171,30 @@ protected:
123 */ 171 */
124 Session m_session; 172 Session *m_session;
173
174 /**
175 * current character image
176 */
177 QArray<Character> m_image;
125 178
126 /** 179 /**
127 * other misc vars 180 * lines count
128 */ 181 */
182 int m_lines;
129 183
184 /**
185 * columns count
186 */
187 int m_columns;
188
189 /**
190 * clipboard
191 */
192 QClipboard* m_clipboard;
193
194 /**
195 * whether widget was resized
196 */
197 bool m_resizing;
130}; 198};
199
200#endif // WIDGET_LAYER_H