File indexing completed on 2024-04-14 05:36:46
0001 /*************************************************************************** 0002 * Copyright (C) 2003-2005 by David Saxton * 0003 * david@bluehaze.org * 0004 * * 0005 * This program is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 ***************************************************************************/ 0010 0011 #include "logview.h" 0012 0013 #include <KLocalizedString> 0014 #include <katemdi.h> 0015 0016 // #include <q3popupmenu.h> 0017 #include <QEvent> 0018 #include <QLayout> 0019 #include <QMenu> 0020 0021 #include <ktechlab_debug.h> 0022 0023 // BEGIN class LogView 0024 LogView::LogView(KateMDI::ToolView *parent) 0025 : KTextEdit(parent) 0026 { 0027 if (parent->layout()) { 0028 parent->layout()->addWidget(this); 0029 qCDebug(KTL_LOG) << " added item selector to parent's layout " << parent; 0030 } else { 0031 qCWarning(KTL_LOG) << " unexpected null layout on parent " << parent; 0032 } 0033 0034 setReadOnly(true); 0035 // setPaper( Qt::white ); // TODO re-enable this, get an equivalent 0036 // setTextFormat( Qt::LogText ); // 2018.12.07 - use toHtml() and html() methods 0037 // setWordWrap( WidgetWidth ); 0038 setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); 0039 setFocusPolicy(Qt::NoFocus); 0040 0041 // Connect up signal emitted when the user doubleclicks on a paragraph in the log view 0042 // connect( this, SIGNAL(clicked(int,int)), this, SLOT(slotParaClicked(int,int)) ); 0043 // ^ reimplemented by: mouseDoubleClickEvent() 0044 } 0045 0046 LogView::~LogView() 0047 { 0048 } 0049 0050 void LogView::clear() 0051 { 0052 m_messageInfoMap.clear(); 0053 KTextEdit::clear(); 0054 } 0055 0056 void LogView::addOutput(QString text, OutputType outputType, MessageInfo messageInfo) 0057 { 0058 tidyText(text); 0059 switch (outputType) { 0060 case LogView::ot_important: 0061 append(QString("<font color=\"#000000\"><b>%1</b></font>").arg(text)); 0062 break; 0063 0064 case LogView::ot_info: 0065 append(QString("<font color=\"#000000\"><i>%1</i></font>").arg(text)); 0066 break; 0067 0068 case LogView::ot_message: 0069 append(QString("<font color=\"#000000\">%1</font>").arg(text)); 0070 break; 0071 0072 case LogView::ot_warning: 0073 append(QString("<font color=\"#666666\">%1</font>").arg(text)); 0074 break; 0075 0076 case LogView::ot_error: 0077 append(QString("<font color=\"#800000\">%1</font>").arg(text)); 0078 break; 0079 } 0080 0081 // m_messageInfoMap[ paragraphs()-1 ] = messageInfo; 0082 m_messageInfoMap[document()->blockCount() - 1] = messageInfo; 0083 } 0084 0085 void LogView::mouseDoubleClickEvent(QMouseEvent *e) 0086 { 0087 QTextCursor curs = cursorForPosition(e->pos()); 0088 slotParaClicked(curs.blockNumber(), curs.columnNumber()); 0089 QTextEdit::mouseDoubleClickEvent(e); // note: is this needed? 0090 } 0091 0092 void LogView::slotParaClicked(int para, int /*pos*/) 0093 { 0094 // QString t = text(para); 0095 QString t = document()->findBlockByLineNumber(para).text(); 0096 untidyText(t); 0097 emit paraClicked(t, m_messageInfoMap[para]); 0098 } 0099 0100 void LogView::tidyText(QString &t) 0101 { 0102 t.replace("&", "&"); 0103 t.replace("<", "<"); 0104 t.replace(">", ">"); 0105 } 0106 0107 void LogView::untidyText(QString &t) 0108 { 0109 t.replace("<", "<"); 0110 t.replace(">", ">"); 0111 t.replace("&", "&"); 0112 } 0113 0114 QMenu *LogView::createPopupMenu(const QPoint &pos) 0115 { 0116 QMenu *menu = KTextEdit::createStandardContextMenu(pos); 0117 0118 // menu->insertSeparator(); // 2018.12.07 0119 menu->addSeparator(); 0120 // int id = menu->insertItem( i18n("Clear All"), this, SLOT(clear()) ); // 2018.12.07 0121 QAction *clearAllAct = menu->addAction(i18n("Clear All"), this, SLOT(clear())); 0122 clearAllAct->setEnabled(document()->blockCount() > 1); 0123 0124 //// "an empty textedit is always considered to have one paragraph" - qt documentation 0125 //// although this does not always seem to be the case, so I don't know... 0126 ////menu->setItemEnabled( id, paragraphs() > 1 ); 0127 // menu->setItemEnabled( id, document()->blockCount() > 1 ); 0128 0129 return menu; 0130 } 0131 // END class LogView 0132 0133 // BEGIN class MessageInfo 0134 MessageInfo::MessageInfo() 0135 { 0136 m_fileLine = -1; 0137 } 0138 0139 MessageInfo::MessageInfo(QString fileURL, int fileLine) 0140 { 0141 m_fileURL = fileURL; 0142 m_fileLine = fileLine; 0143 } 0144 // END class MessageInfo 0145 0146 #include "moc_logview.cpp"