summaryrefslogtreecommitdiffstats
path: root/quanta/messages/messageoutput.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'quanta/messages/messageoutput.cpp')
-rw-r--r--quanta/messages/messageoutput.cpp179
1 files changed, 179 insertions, 0 deletions
diff --git a/quanta/messages/messageoutput.cpp b/quanta/messages/messageoutput.cpp
new file mode 100644
index 00000000..6b89aaa9
--- /dev/null
+++ b/quanta/messages/messageoutput.cpp
@@ -0,0 +1,179 @@
+/***************************************************************************
+ messageoutput.cpp - description
+ -------------------
+ begin : Thu Feb 24 2000
+ copyright : (C) 2000 by Yacovlev Alexander & Dmitry Poplavski <pdima@mail.univ.kiev.ua>
+ (C) 2003-2005 Andras Mantia <amantia@kde.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+// KDE includes
+#include <kapplication.h>
+#include <kdebug.h>
+#include <kfiledialog.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kpopupmenu.h>
+#include <kiconloader.h>
+
+// Qt includes
+#include <qclipboard.h>
+#include <qfile.h>
+#include <qtextstream.h>
+
+#include "messageoutput.h"
+#include "messageitem.h"
+
+MessageOutput::MessageOutput(QWidget *parent, const char *name )
+ : QListBox(parent,name)
+{
+ m_maxItems = 2000;
+
+ QPalette pal = palette();
+ pal.setColor(QColorGroup::HighlightedText, pal.color(QPalette::Normal, QColorGroup::Text));
+ pal.setColor(QColorGroup::Highlight, pal.color(QPalette::Normal, QColorGroup::Mid));
+ setPalette(pal);
+ setFocusPolicy( NoFocus );
+
+ m_popupMenu = new KPopupMenu(this);
+ connect(this, SIGNAL(contextMenuRequested(QListBoxItem*, const QPoint&)),
+ this, SLOT(showMenu(QListBoxItem*, const QPoint&)));
+ m_popupMenu->insertItem( SmallIconSet("editcopy"), i18n("&Copy"), this, SLOT(copyContent()) ) ;
+ m_popupMenu->insertItem( SmallIconSet("filesaveas"), i18n("&Save As..."), this, SLOT(saveContent()) ) ;
+ m_popupMenu->insertSeparator();
+ m_popupMenu->insertItem( SmallIconSet("editclear"), i18n("Clear"), this, SLOT(clear()) ) ;
+
+ connect( this, SIGNAL(clicked(QListBoxItem*)), SLOT(clickItem(QListBoxItem*)) );
+}
+
+MessageOutput::~MessageOutput()
+{
+}
+
+MessageItem *MessageOutput::insertItem(const QString& s)
+{
+ checkMaxItems();
+ MessageItem *it = new MessageItem(this, s);
+ setBottomItem(count()>0?count()-1:0);
+ return it;
+}
+
+void MessageOutput::addToLastItem(const QString& s)
+{
+ int ind = count() - 1;
+ if ( ind != -1 ) {
+ MessageItem *it = dynamic_cast<MessageItem*>( item(ind) );
+ if ( it )
+ it->addText( s );
+ else
+ changeItem( text( ind )+ s, ind );
+ }
+}
+
+void MessageOutput::showMessage(int line, int col, const QString &fileName, const QString& s, bool append)
+{
+ MessageItem *it = 0L;
+ QString message = s;
+ int endPos;
+ if ( !count() || (!append && !text(count()-1).stripWhiteSpace().isEmpty()) )
+ it = insertItem("");
+ while ( ( endPos = message.find('\n') ) != -1 ) {
+ if (it)
+ {
+ it->setLine(line);
+ it->setColumn(col);
+ it->setFileName(fileName);
+ }
+ addToLastItem( message.left(endPos) );
+ it = insertItem("");
+ message.remove(0,endPos+1);
+ }
+ if (!message.isEmpty())
+ {
+ if (it)
+ {
+ it->setLine(line);
+ it->setColumn(col);
+ it->setFileName(fileName);
+ }
+ addToLastItem( message);
+ }
+ setBottomItem(count()>0?count()-1:0);
+}
+
+void MessageOutput::showMessage(const QString& s, bool append)
+{
+ showMessage(-1, -1, "", s, append);
+}
+
+
+void MessageOutput::checkMaxItems()
+{
+ if ( count() >= m_maxItems )
+ removeItem( index(firstItem()) );
+}
+
+void MessageOutput::clickItem( QListBoxItem * l_item )
+{
+ MessageItem *item = dynamic_cast<MessageItem*>(l_item);
+ if ( item ) {
+// kdDebug(24000) << "Column: " << item->column() << endl;
+ if ( item->line() != -1 )
+ emit clicked( item->fileName(), item->line() - 1, item->column() - 1);
+ }
+}
+
+void MessageOutput::showMenu( QListBoxItem*, const QPoint& l_point )
+{
+ m_popupMenu->exec(l_point);
+}
+
+QString MessageOutput::content()
+{
+ QString p_content;
+ for (uint i=0; i<count(); i++)
+ p_content.append(text(i) + "\n");
+ return p_content;
+}
+
+void MessageOutput::copyContent()
+{
+ kapp->clipboard()->setText(content(), QClipboard::Clipboard);
+}
+
+void MessageOutput::saveContent()
+{
+ KURL url=KFileDialog::getSaveURL(QDir::currentDirPath(),
+ i18n("*.log|Log Files (*.log)\n*|All Files"), this, i18n("Save Log File"));
+ if (url.isEmpty())
+ return;
+
+ QFileInfo fileinfo(url.path());
+ if (fileinfo.exists() && KMessageBox::warningContinueCancel(0,
+ i18n("<qt>File<br><b>%1</b><br>already exists. Overwrite it?</qt>")
+ .arg(url.path()), QString::null, i18n("Overwrite")) == KMessageBox::Cancel)
+ return;
+
+ QFile file(url.path());
+ if (!file.open(IO_WriteOnly)) {
+ KMessageBox::error(0, i18n("<qt>Cannot save log file<br><b>%1</b></qt>")
+ .arg(url.url()));
+ return;
+ }
+
+ QTextStream textfile(&file);
+ textfile << content();
+ file.close();
+
+}
+
+
+#include "messageoutput.moc"