summaryrefslogtreecommitdiffstats
path: root/src/codeeditor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/codeeditor.cpp')
-rwxr-xr-xsrc/codeeditor.cpp426
1 files changed, 426 insertions, 0 deletions
diff --git a/src/codeeditor.cpp b/src/codeeditor.cpp
new file mode 100755
index 0000000..2e5c086
--- /dev/null
+++ b/src/codeeditor.cpp
@@ -0,0 +1,426 @@
+/***************************************************************************
+ * Copyright (C) 2005 by Mark Six *
+ * marksix@xs4all.nl *
+ * *
+ * 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. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#include "codeeditor.h"
+#include <klibloader.h>
+
+#include <qmessagebox.h>
+#include <kmessagebox.h>
+#include <qlayout.h>
+#include <kfiledialog.h>
+
+CodeEditor::CodeEditor(QWidget *parent, const char *name)
+ : QWidget(parent, name)
+{
+ QVBoxLayout *layout = new QVBoxLayout(this) ;
+
+ KLibFactory *factory = KLibLoader::self()->factory( "libkatepart" ) ;
+ m_doc = ( Kate::Document* ) factory->create( 0L, "kate", "KTextEditor::Document" ) ;
+ m_view = ( Kate::View * ) m_doc->createView( this ) ;
+ m_view->setIconBorder( true ) ;
+
+ connect( m_view, SIGNAL(cursorPositionChanged()), this, SLOT(slotCursorPositionChanged()) );
+
+ layout->addWidget( m_view ) ;
+
+ m_exeLine = 0 ;
+ m_filename = "" ;
+ m_bFilename = false ;
+ m_doc->setModified( false );
+
+ m_doc->setDescription((KTextEditor::MarkInterface::MarkTypes)Breakpoint, "Breakpoint");
+ m_doc->setPixmap((KTextEditor::MarkInterface::MarkTypes)Breakpoint, *inactiveBreakpointPixmap());
+ m_doc->setPixmap((KTextEditor::MarkInterface::MarkTypes)ActiveBreakpoint, *activeBreakpointPixmap());
+ m_doc->setPixmap((KTextEditor::MarkInterface::MarkTypes)ReachedBreakpoint, *reachedBreakpointPixmap());
+ m_doc->setPixmap((KTextEditor::MarkInterface::MarkTypes)DisabledBreakpoint, *disabledBreakpointPixmap());
+ m_doc->setPixmap((KTextEditor::MarkInterface::MarkTypes)ExecutionPoint, *executionPointPixmap());
+ m_doc->setMarksUserChangable( Bookmark | Breakpoint );
+
+ setHighlightMode() ;
+
+
+ m_statusBar = new KStatusBar( this ) ;
+ layout->addWidget( m_statusBar ) ;
+ m_statusBar->insertItem( "", 0, 0, true ) ;
+
+ slotCursorPositionChanged() ;
+}
+
+CodeEditor::~CodeEditor()
+{
+ if ( m_view->document()->views().count() == 1)
+ delete m_view->document();
+
+ delete m_statusBar ;
+}
+
+void CodeEditor::slotCursorPositionChanged()
+{
+ unsigned int line, column ;
+ m_view->cursorPosition( &line, &column ) ;
+ m_statusBar->changeItem( QString( " Line: %1 Col: %2 " ).arg( QString::number( line+1 ) ).arg( QString::number( column+1 ) ), 0 ) ;
+}
+
+void CodeEditor::slotToggleBreakpoint()
+{
+ unsigned int line, col ;
+
+ m_view->cursorPosition( &line, &col ) ;
+
+ if ( !isBreakpoint( line ) )
+ if ( m_doc->mark( m_exeLine ) & ExecutionPoint )
+ m_doc->setMark( line, Breakpoint | ExecutionPoint) ;
+ else
+ m_doc->setMark( line, Breakpoint ) ;
+ else
+ m_doc->removeMark( line, Breakpoint ) ;
+}
+
+void CodeEditor::clearExecutionMarker()
+{
+ m_doc->removeMark( m_exeLine, ExecutionPoint ) ;
+}
+
+void CodeEditor::setCursor( unsigned int line )
+{
+ m_view->setCursorPosition( line, 0 ) ;
+}
+
+void CodeEditor::setExecutionMarker( unsigned int line )
+{
+ m_doc->removeMark( m_exeLine,ExecutionPoint ) ;
+ m_exeLine = line ;
+ if ( isBreakpoint( line ) ) {
+ m_doc->setMark( m_exeLine, ExecutionPoint| Breakpoint ) ;
+ } else
+ m_doc->setMark( m_exeLine, ExecutionPoint ) ;
+
+ setCursor( line ) ; // KDevelop does this too!
+
+}
+
+bool CodeEditor::isBreakpoint( unsigned int line )
+{
+ return ( ( m_doc->mark( line ) & Breakpoint ) != 0 ) ;
+}
+
+void CodeEditor::slotNewFile()
+{
+ m_doc->clear() ;
+ m_doc->setModified( false ) ;
+ m_filename = "" ;
+ m_bFilename = false ;
+}
+
+void CodeEditor::slotSaveAs()
+{
+ if ( m_view->saveAs() == Kate::View::SAVE_OK ) {
+ m_filename = m_doc->url().path() ;
+ m_bFilename = true ;
+ }
+}
+
+bool CodeEditor::save()
+{
+ slotSave() ;
+ return m_bFilename ;
+}
+
+void CodeEditor::slotSave()
+{
+ if ( !m_bFilename )
+ slotSaveAs() ;
+ else if ( m_view->save() == Kate::View::SAVE_OK ) {
+ m_filename = m_doc->url().path() ;
+ m_bFilename = true ;
+ }
+}
+
+void CodeEditor::slotPrint()
+{
+ m_doc->print() ;
+}
+
+void CodeEditor::slotFind()
+{
+ m_view->find() ;
+}
+
+void CodeEditor::slotFindNext()
+{
+ m_view->findAgain() ;
+}
+
+void CodeEditor::slotShowConfig()
+{
+ m_doc->configDialog() ;
+}
+
+void CodeEditor::slotCut()
+{
+ m_view->cut() ;
+}
+
+void CodeEditor::slotCopy()
+{
+ m_view->copy() ;
+}
+
+void CodeEditor::slotPaste()
+{
+ m_view->paste() ;
+}
+
+void CodeEditor::slotSelectAll()
+{
+ m_doc->selectAll() ;
+}
+
+void CodeEditor::slotUndo()
+{
+ m_doc->undo() ;
+}
+
+void CodeEditor::slotRedo()
+{
+ m_doc->redo() ;
+}
+
+void CodeEditor::slotOpen()
+{
+ QString filename = KFileDialog::getOpenFileName( QString::null, QString( "*.psm|PicoBlaze assembly files" ) ) ;
+ if ( filename != "" ) {
+ m_filename = filename ;
+ m_bFilename = true ;
+ m_doc->openURL( filename ) ;
+ setHighlightMode() ;
+ }
+}
+
+void CodeEditor::open( QString filename )
+{
+ if ( filename != "" ) {
+ m_filename = filename ;
+ m_bFilename = true ;
+ m_doc->openURL( filename ) ;
+ setHighlightMode() ;
+ }
+}
+
+QString CodeEditor::getFilename()
+{
+ return m_filename ;
+}
+
+
+void CodeEditor::setHighlightMode()
+{
+ int i = 0;
+ int hlModeCount = m_doc->hlModeCount();
+ while ( i < hlModeCount ) {
+ if ( m_doc->hlModeName( i ) == "pblazeASM" ) {
+ m_doc->setHlMode( i ) ;
+ break ;
+ }
+ i++;
+ }
+}
+
+bool CodeEditor::askSave()
+{
+ QString filename ;
+ if ( m_bFilename )
+ filename = m_filename ;
+ else
+ filename = "Untitled" ;
+
+ int choice = KMessageBox::warningYesNoCancel( this, QString( "The document \'%1\' has been modified.\nDo you want to save it?").arg( filename ), "Save Document?", KGuiItem( "Save" ), KGuiItem( "Discard" ) );
+
+ if ( choice == KMessageBox::Yes )
+ save() ;
+
+ return ( choice != KMessageBox::Cancel ) ;
+}
+
+bool CodeEditor::close()
+{
+ if ( m_doc->isModified() )
+ return askSave() ;
+ return true ;
+}
+
+const QPixmap* CodeEditor::inactiveBreakpointPixmap()
+{
+ const char*breakpoint_gr_xpm[]={
+ "11 16 6 1",
+ "c c #c6c6c6",
+ "d c #2c2c2c",
+ "# c #000000",
+ ". c None",
+ "a c #ffffff",
+ "b c #555555",
+ "...........",
+ "...........",
+ "...#####...",
+ "..#aaaaa#..",
+ ".#abbbbbb#.",
+ "#abbbbbbbb#",
+ "#abcacacbd#",
+ "#abbbbbbbb#",
+ "#abcacacbd#",
+ "#abbbbbbbb#",
+ ".#bbbbbbb#.",
+ "..#bdbdb#..",
+ "...#####...",
+ "...........",
+ "...........",
+ "..........."};
+ static QPixmap pixmap( breakpoint_gr_xpm );
+ return &pixmap;
+}
+
+
+const QPixmap* CodeEditor::activeBreakpointPixmap()
+{
+ const char* breakpoint_xpm[]={
+ "11 16 6 1",
+ "c c #c6c6c6",
+ ". c None",
+ "# c #000000",
+ "d c #840000",
+ "a c #ffffff",
+ "b c #ff0000",
+ "...........",
+ "...........",
+ "...#####...",
+ "..#aaaaa#..",
+ ".#abbbbbb#.",
+ "#abbbbbbbb#",
+ "#abcacacbd#",
+ "#abbbbbbbb#",
+ "#abcacacbd#",
+ "#abbbbbbbb#",
+ ".#bbbbbbb#.",
+ "..#bdbdb#..",
+ "...#####...",
+ "...........",
+ "...........",
+ "..........."};
+ static QPixmap pixmap( breakpoint_xpm );
+ return &pixmap;
+}
+
+
+
+const QPixmap* CodeEditor::reachedBreakpointPixmap()
+{
+ const char*breakpoint_bl_xpm[]={
+ "11 16 7 1",
+ "a c #c0c0ff",
+ "# c #000000",
+ "c c #0000c0",
+ "e c #0000ff",
+ "b c #dcdcdc",
+ "d c #ffffff",
+ ". c None",
+ "...........",
+ "...........",
+ "...#####...",
+ "..#ababa#..",
+ ".#bcccccc#.",
+ "#acccccccc#",
+ "#bcadadace#",
+ "#acccccccc#",
+ "#bcadadace#",
+ "#acccccccc#",
+ ".#ccccccc#.",
+ "..#cecec#..",
+ "...#####...",
+ "...........",
+ "...........",
+ "..........."};
+ static QPixmap pixmap( breakpoint_bl_xpm );
+ return &pixmap;
+}
+
+
+const QPixmap* CodeEditor::disabledBreakpointPixmap()
+{
+ const char*breakpoint_wh_xpm[]={
+ "11 16 7 1",
+ "a c #c0c0ff",
+ "# c #000000",
+ "c c #0000c0",
+ "e c #0000ff",
+ "b c #dcdcdc",
+ "d c #ffffff",
+ ". c None",
+ "...........",
+ "...........",
+ "...#####...",
+ "..#ddddd#..",
+ ".#ddddddd#.",
+ "#ddddddddd#",
+ "#ddddddddd#",
+ "#ddddddddd#",
+ "#ddddddddd#",
+ "#ddddddddd#",
+ ".#ddddddd#.",
+ "..#ddddd#..",
+ "...#####...",
+ "...........",
+ "...........",
+ "..........."};
+ static QPixmap pixmap( breakpoint_wh_xpm );
+ return &pixmap;
+}
+
+
+const QPixmap* CodeEditor::executionPointPixmap()
+{
+ const char*exec_xpm[]={
+ "11 16 4 1",
+ "a c #00ff00",
+ "b c #000000",
+ ". c None",
+ "# c #00c000",
+ "...........",
+ "...........",
+ "...........",
+ "#a.........",
+ "#aaa.......",
+ "#aaaaa.....",
+ "#aaaaaaa...",
+ "#aaaaaaaaa.",
+ "#aaaaaaa#b.",
+ "#aaaaa#b...",
+ "#aaa#b.....",
+ "#a#b.......",
+ "#b.........",
+ "...........",
+ "...........",
+ "..........."};
+ static QPixmap pixmap( exec_xpm );
+ return &pixmap;
+}
+
+
+
+
+#include "codeeditor.moc"