Salome HOME
Initialisation de la base KERNEL avec la version operationnelle de KERNEL_SRC issue...
[modules/kernel.git] / src / SALOMEGUI / QAD_Message.cxx
1 using namespace std;
2 //  File      : QAD_Message.cxx
3 //  Created   : Thu Jun 14 15:55:14 2001
4 //  Author    : Nicolas REJNERI
5 //  Project   : SALOME
6 //  Module    : SALOMEGUI
7 //  Copyright : Open CASCADE
8 //  $Header$
9
10 #include "QAD_Message.h"
11 #include "QAD_Application.h"
12 #include "QAD_Config.h"
13 #include "QAD_Tools.h"
14 #include <stdio.h>
15 #include <qstring.h>
16 #include <qpopupmenu.h>
17 #include <qmap.h>
18
19 enum { IdCopy, IdClear, IdSelectAll };
20
21 /*!
22   \class QAD_Message QAD_Message.h
23   \brief Messages window for Study. 
24 */
25
26 /*!
27   Constructor - creates Message Log window
28 */
29 QAD_Message::QAD_Message(QWidget *parent, const char* name)
30   : QMultiLineEdit(parent, name)
31 {
32   // setting default title
33   myTitle = tr("MESSAGE_LOG_NAME");
34   // setting default prompt
35   myPrompt = ">>> ";
36   // setting font ( from preferences )
37   QString fntSet = QAD_CONFIG->getSetting("Viewer:ConsoleFont");
38   QFont myFont = QAD_Tools::stringToFont( fntSet );
39 //  QFont myFont("Courier", 11);
40   setFont(myFont);
41   setReadOnly(TRUE);
42   // appending title
43   setMessage(myTitle);
44   // setting palette (special)
45   setPalette( QAD_Application::getPalette(true) );
46   setFocusPolicy( NoFocus );
47   // currently no text wrap
48   setWordWrap(NoWrap);
49 }
50
51 /*!
52     Destructor
53 */
54 QAD_Message::~QAD_Message()
55 {
56 }
57
58 /*!
59   Adds message
60 */
61 void QAD_Message::setMessage(const QString& s)
62 {
63   int line = numLines() > 0 ? numLines()-1 : 0;
64   int col  = lineLength(line);
65   if (!s.isNull() && s.length() > 0) {
66     QString ss = s;
67     insertAt(ss, line, col, false);
68   }
69   append(myPrompt);
70 }
71
72 /*
73    Processes own popup manu
74 */
75 void QAD_Message::mousePressEvent(QMouseEvent* event)
76 {
77   if ( event->button() == RightButton ) {
78     QPopupMenu *popup = new QPopupMenu( this );
79     QMap<int, int> idMap;
80
81     int line1, col1, line2, col2;
82     getMarkedRegion(&line1, &col1, &line2, &col2);
83     bool allSelected = getMarkedRegion(&line1, &col1, &line2, &col2) &&
84       line1 == 0 && line2 == numLines()-1 && col1 == 0 && col2 == lineLength(line2);
85     int id;
86     id = popup->insertItem( tr( "EDIT_COPY_CMD" ) );
87     idMap.insert(IdCopy, id);
88     id = popup->insertItem( tr( "EDIT_CLEAR_CMD" ) );
89     idMap.insert(IdClear, id);
90     popup->insertSeparator();
91     id = popup->insertItem( tr( "EDIT_SELECTALL_CMD" ) );
92     idMap.insert(IdSelectAll, id);
93     popup->setItemEnabled( idMap[ IdCopy ], hasMarkedText() );
94     popup->setItemEnabled( idMap[ IdSelectAll ],
95                           (bool)text().length() && !allSelected );
96     
97     int r = popup->exec( event->globalPos() );
98     delete popup;
99     
100     if ( r == idMap[ IdCopy ] ) {
101       copy();
102     }
103     else if ( r == idMap [ IdClear ] ) {
104       clear();
105       setMessage(myTitle);
106     }
107     else if ( r == idMap[ IdSelectAll ] ) {
108       selectAll();
109     }
110     return;
111   }
112   else {
113     QMultiLineEdit::mousePressEvent(event);
114   }
115 }
116
117 /*
118    Sets prompt ( default is '>>> ' )
119 */
120 void QAD_Message::setPrompt(const QString& prompt) 
121 {
122   myPrompt = prompt;
123   clear();
124   setMessage(myTitle);
125 }