summaryrefslogtreecommitdiffstats
path: root/kivio/kiviopart/kivio_view.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-01-20 01:29:50 +0000
commit8362bf63dea22bbf6736609b0f49c152f975eb63 (patch)
tree0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kivio/kiviopart/kivio_view.cpp
downloadkoffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz
koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kivio/kiviopart/kivio_view.cpp')
-rw-r--r--kivio/kiviopart/kivio_view.cpp2279
1 files changed, 2279 insertions, 0 deletions
diff --git a/kivio/kiviopart/kivio_view.cpp b/kivio/kiviopart/kivio_view.cpp
new file mode 100644
index 000000000..82aad1f63
--- /dev/null
+++ b/kivio/kiviopart/kivio_view.cpp
@@ -0,0 +1,2279 @@
+/*
+ * Kivio - Visual Modelling and Flowcharting
+ * Copyright (C) 2000-2004 theKompany.com & Dave Marotti,
+ * Peter Simonsson
+ *
+ * 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 <kprinter.h> // has to be first
+
+#include <iostream>
+#include <stdlib.h>
+#include <time.h>
+#include <assert.h>
+
+#include <qlayout.h>
+#include <qwidgetstack.h>
+#include <qsplitter.h>
+#include <qpushbutton.h>
+#include <qradiobutton.h>
+#include <qprintdialog.h>
+#include <qptrcollection.h>
+#include <qkeycode.h>
+#include <qcheckbox.h>
+#include <qmime.h>
+#include <qtoolbutton.h>
+#include <qtimer.h>
+#include <qbutton.h>
+#include <qclipboard.h>
+#include <qprogressbar.h>
+
+#include <qstringlist.h>
+#include <qstrlist.h>
+#include <qimage.h>
+#include <kfiledialog.h>
+
+#include <kdialogbase.h>
+#include <kaction.h>
+#include <kcolorbutton.h>
+#include <kapplication.h>
+#include <klocale.h>
+#include <kiconloader.h>
+#include <kstdaccel.h>
+#include <kstdaction.h>
+#include <kglobal.h>
+#include <kmessagebox.h>
+#include <kdebug.h>
+#include <kglobalsettings.h>
+#include <kstatusbar.h>
+#include <kinputdialog.h>
+#include <knotifyclient.h>
+
+#include <dcopclient.h>
+#include <dcopref.h>
+
+#include <kparts/event.h>
+#include <KoPartSelectDia.h>
+#include <KoQueryTrader.h>
+#include <KoPageLayoutDia.h>
+#include <KoRuler.h>
+#include <KoZoomHandler.h>
+#include <KoUnitWidgets.h>
+#include <KoApplication.h>
+#include <KoTabBar.h>
+#include <Kolinewidthaction.h>
+#include <Kolinestyleaction.h>
+#include <kopalettemanager.h>
+#include <KoGuideLineDia.h>
+
+#include "kivio_view.h"
+#include "kivio_dlg_pageshow.h"
+#include "kivio_factory.h"
+#include "kivio_map.h"
+#include "kivio_page.h"
+#include "kivio_doc.h"
+#include "kivio_canvas.h"
+#include "kivio_stencil_spawner.h"
+#include "kivio_grid_data.h"
+
+#include "tkcoloractions.h"
+
+#include "kivio_protection_panel.h"
+#include "kivio_stencil_geometry_panel.h"
+#include "kivio_layer_panel.h"
+#include "kivio_birdeye_panel.h"
+#include "export_page_dialog.h"
+
+#include "kivioaligndialog.h"
+#include "kiviooptionsdialog.h"
+
+#include "stencilbardockmanager.h"
+#include "kivio_common.h"
+#include "kivio_painter.h"
+#include "kivio_stencil.h"
+#include "kivio_stencil_spawner_set.h"
+#include "kivio_screen_painter.h"
+
+#include "kivio_pluginmanager.h"
+
+#include "kivio_stackbar.h"
+#include "kivio_icon_view.h"
+
+#include "KIvioViewIface.h"
+#include "kivio_command.h"
+#include "kiviostencilsetaction.h"
+#include <qiconview.h>
+#include "kivioarrowheadaction.h"
+#include "kiviotextformatdlg.h"
+#include "kiviostencilformatdlg.h"
+#include "kivioarrowheadformatdlg.h"
+#include "kiviodragobject.h"
+#include "kivioglobal.h"
+#include "kivio_config.h"
+#include "kivioaddstencilsetpanel.h"
+#include "kiviostencilsetinstaller.h"
+#include "addstenciltool.h"
+#include "objectlistpalette.h"
+#include "addstencilsetdialog.h"
+
+#define TOGGLE_ACTION(X) ((KToggleAction*)actionCollection()->action(X))
+#define MOUSEPOS_TEXT 1000
+#define PAGECOUNT_TEXT 0
+#define INFO_TEXT 1
+
+using namespace Kivio;
+
+KivioView::KivioView( QWidget *_parent, const char *_name, KivioDoc* doc )
+: KoView( doc, _parent, _name )
+{
+ m_bShowGuides = true;
+ m_bSnapGuides = true;
+ m_addStencilSetDialog = 0;
+ m_pluginManager = new PluginManager(this, "Kivio Plugin Manager");
+ m_addStencilTool = new Kivio::AddStencilTool(this);
+ m_pPaletteManager = new KoPaletteManager(this, actionCollection(), "kivio palette manager");
+ m_zoomHandler = new KoZoomHandler();
+ zoomHandler()->setZoomAndResolution(100, KoGlobal::dpiX(), KoGlobal::dpiY());
+ m_pDoc = doc;
+ m_pActivePage = 0;
+ dcop = 0;
+ dcopObject(); // build it
+
+ if(KStatusBar* sb = statusBar()) { // No statusbar in e.g. konqueror
+ m_pageCountSLbl = new KStatusBarLabel(i18n("%1 current page, %2 total number of pages",
+ "Page %1/%2").arg(0).arg(0), PAGECOUNT_TEXT, sb);
+ addStatusBarItem(m_pageCountSLbl, 0, false);
+
+ m_infoSLbl = new KStatusBarLabel("", INFO_TEXT, sb);
+ addStatusBarItem(m_infoSLbl, 10, false);
+
+ // Add coords to the statusbar
+ QString unit = KoUnit::unitName(m_pDoc->unit());
+ KoPoint xy(0, 0);
+ QString text = i18n("%1 x coord, %2 y coord, %3 and %4 the unit",
+ "X: %1 %3 Y: %2 %4").arg(KGlobal::_locale->formatNumber(xy.x(), 2))
+ .arg(KGlobal::_locale->formatNumber(xy.y(), 2)).arg(unit).arg(unit);
+ m_coordSLbl = new KStatusBarLabel(text, MOUSEPOS_TEXT, sb);
+ addStatusBarItem(m_coordSLbl, 0, true);
+ }
+
+ // Handle progress information from the doc
+ m_statusBarProgress = 0;
+
+ connect(m_pDoc, SIGNAL(initProgress()), this, SLOT(initStatusBarProgress()));
+ connect(m_pDoc, SIGNAL(progress(int)), this, SLOT(setStatusBarProgress(int)));
+ connect(m_pDoc, SIGNAL(endProgress()), this, SLOT(removeStatusBarProgress()));
+
+ bool isModified = doc->isModified();
+ m_pStencilBarDockManager = new StencilBarDockManager(this);
+
+ // QGridLayout for the entire view
+ QGridLayout *viewGrid = new QGridLayout(this);
+
+ // A widget to hold the entire right side (old view)
+ QWidget *pRightSide = new QWidget(this);
+ viewGrid->addWidget(pRightSide, 0, 0);
+
+ // Split tabbar and Horz. Scroll Bar
+ QSplitter* tabSplit = new QSplitter(pRightSide);
+
+ // Tab Bar
+ m_pTabBar = new KoTabBar(tabSplit);
+ connect( m_pTabBar,
+ SIGNAL(tabChanged(const QString&)),
+ SLOT( changePage(const QString&)));
+ connect( m_pTabBar, SIGNAL( doubleClicked() ), SLOT( renamePage() ) );
+ connect( m_pTabBar, SIGNAL( contextMenu( const QPoint& ) ),
+ SLOT( popupTabBarMenu( const QPoint& ) ) );
+ connect(m_pTabBar, SIGNAL(tabMoved(unsigned, unsigned)), this, SLOT(moveTab(unsigned, unsigned)));
+ m_pTabBar->setReverseLayout( QApplication::reverseLayout() );
+
+ // Scroll Bar
+ m_vertScrollBar = new QScrollBar(QScrollBar::Vertical,pRightSide);
+ m_horzScrollBar = new QScrollBar(QScrollBar::Horizontal,tabSplit);
+
+ QValueList<int> sizes;
+ sizes << tabSplit->width() / 2 << tabSplit->width() / 2;
+ tabSplit->setSizes(sizes);
+ QHBoxLayout* tabLayout = new QHBoxLayout();
+ tabLayout->addWidget(tabSplit);
+
+ // The widget on which we display the page
+ QWidgetStack* canvasBase = new QWidgetStack(pRightSide);
+ m_pCanvas = new KivioCanvas(canvasBase,this,doc,m_vertScrollBar,m_horzScrollBar);
+ canvasBase->addWidget(m_pCanvas,0);
+ canvasBase->raiseWidget(m_pCanvas);
+ m_pCanvas->setFocusPolicy(QWidget::StrongFocus);
+
+ // Rulers
+ vRuler = new KoRuler(pRightSide, m_pCanvas, Qt::Vertical, Kivio::Config::defaultPageLayout(),
+ KoRuler::F_HELPLINES, m_pDoc->unit());
+ vRuler->showMousePos(true);
+ vRuler->setZoom(zoomHandler()->zoomedResolutionY());
+ hRuler = new KoRuler(pRightSide, m_pCanvas, Qt::Horizontal, Kivio::Config::defaultPageLayout(),
+ KoRuler::F_HELPLINES, m_pDoc->unit());
+ hRuler->showMousePos(true);
+ hRuler->setZoom(zoomHandler()->zoomedResolutionX());
+ connect(m_vertScrollBar, SIGNAL(valueChanged(int)), SLOT(setRulerVOffset(int)));
+ connect(m_horzScrollBar, SIGNAL(valueChanged(int)), SLOT(setRulerHOffset(int)));
+ connect(vRuler, SIGNAL(unitChanged(KoUnit::Unit)), SLOT(rulerChangedUnit(KoUnit::Unit)));
+ connect(hRuler, SIGNAL(unitChanged(KoUnit::Unit)), SLOT(rulerChangedUnit(KoUnit::Unit)));
+ connect(vRuler, SIGNAL(doubleClicked()), SLOT(paperLayoutDlg()));
+ connect(hRuler, SIGNAL(doubleClicked()), SLOT(paperLayoutDlg()));
+ connect(m_pDoc, SIGNAL(unitChanged(KoUnit::Unit)), SLOT(setRulerUnit(KoUnit::Unit)));
+ connect(m_pCanvas, SIGNAL(visibleAreaChanged()), SLOT(updateRulers()));
+
+ connect(vRuler, SIGNAL(addGuide(const QPoint&, bool, int)),
+ &(m_pCanvas->guideLines()), SLOT(addGuide(const QPoint&, bool, int)));
+ connect(vRuler, SIGNAL(moveGuide(const QPoint&, bool, int)),
+ &(m_pCanvas->guideLines()), SLOT(moveGuide(const QPoint&, bool, int)));
+ connect(hRuler, SIGNAL(addGuide(const QPoint&, bool, int)),
+ &(m_pCanvas->guideLines()), SLOT(addGuide(const QPoint&, bool, int)));
+ connect(hRuler, SIGNAL(moveGuide(const QPoint&, bool, int)),
+ &(m_pCanvas->guideLines()), SLOT(moveGuide(const QPoint&, bool, int)));
+ connect(&(m_pCanvas->guideLines()), SIGNAL(guideLinesChanged(KoView*)), m_pDoc, SLOT(updateGuideLines(KoView*)));
+
+ QGridLayout* layout = new QGridLayout(pRightSide);
+ layout->addWidget(hRuler, 0, 1);
+ layout->addWidget(vRuler, 1, 0);
+ layout->addWidget(canvasBase, 1, 1);
+ layout->addMultiCellLayout(tabLayout, 2, 2, 0, 1);
+ layout->addMultiCellWidget(m_vertScrollBar, 0, 1, 2, 2);
+ layout->setRowStretch(1, 10);
+ layout->setColStretch(1, 10);
+
+ QWidget::setFocusPolicy( QWidget::StrongFocus );
+ setFocusProxy( m_pCanvas );
+
+ connect( this, SIGNAL( invalidated() ), m_pCanvas, SLOT( update() ) );
+ connect( this, SIGNAL( regionInvalidated( const QRegion&, bool ) ), m_pCanvas, SLOT( repaint( const QRegion&, bool ) ) );
+
+ setInstance(KivioFactory::global());
+ if ( !m_pDoc->isReadWrite() )
+ setXMLFile("kivio_readonly.rc");
+ else
+ setXMLFile("kivio.rc");
+
+
+ // Must be executed before setActivePage() and before setupActions()
+ createBirdEyeDock();
+ createLayerDock();
+ createObjectListPalette();
+ createGeometryDock();
+ createProtectionDock();
+ paletteManager()->showWidget("birdseyepanel");
+ paletteManager()->showWidget("stencilgeometrypanel");
+
+ setupActions();
+
+
+ KivioPage* page;
+ for ( page = m_pDoc->map()->firstPage(); page; page = m_pDoc->map()->nextPage() )
+ addPage(page);
+
+ setActivePage(m_pDoc->map()->firstPage());
+
+
+ connect( m_pDoc, SIGNAL( sig_selectionChanged() ), SLOT( updateToolBars() ) );
+ connect( m_pDoc, SIGNAL( sig_addPage(KivioPage*) ), SLOT( addPage(KivioPage*) ) );
+ connect( m_pDoc, SIGNAL( sig_addSpawnerSet(KivioStencilSpawnerSet*) ), SLOT(addSpawnerToStackBar(KivioStencilSpawnerSet*)) );
+ connect( m_pDoc, SIGNAL( sig_updateView(KivioPage*) ), SLOT(slotUpdateView(KivioPage*)) );
+ connect( m_pDoc, SIGNAL( sig_pageNameChanged(KivioPage*,const QString&)), SLOT(slotPageRenamed(KivioPage*,const QString&)) );
+
+ connect( m_pDoc, SIGNAL( sig_updateGrid()),SLOT(slotUpdateGrid()));
+
+ connect(m_pDoc, SIGNAL(loadingFinished()), this, SLOT(loadingFinished()));
+
+ initActions();
+
+ // Load any already-loaded stencils into the stencil dock
+ if( m_pDoc->isReadWrite() ) // only if not embedded in Konqueror
+ {
+ KivioStencilSpawnerSet *pSet;
+ pSet = m_pDoc->spawnerSets()->first();
+ while( pSet )
+ {
+ addSpawnerToStackBar( pSet );
+ pSet = m_pDoc->spawnerSets()->next();
+ }
+ }
+
+ m_pDoc->setModified(isModified);
+ pluginManager()->activateDefaultTool();
+ clipboardDataChanged(); // Enable/disable the paste action
+}
+
+KivioView::~KivioView()
+{
+ delete m_pluginManager;
+ m_pluginManager = 0;
+ delete dcop;
+ dcop = 0;
+ delete m_zoomHandler;
+ m_zoomHandler = 0;
+}
+
+DCOPObject* KivioView::dcopObject()
+{
+ if ( !dcop ) {
+ dcop = new KIvioViewIface( this );
+ }
+
+ return dcop;
+}
+
+void KivioView::createGeometryDock()
+{
+ m_pStencilGeometryPanel = new KivioStencilGeometryPanel(this);
+ m_pStencilGeometryPanel->setCaption(i18n("Geometry"));
+ m_pStencilGeometryPanel->setUnit(m_pDoc->unit());
+ paletteManager()->addWidget(m_pStencilGeometryPanel, "stencilgeometrypanel", "geometrydocker");
+
+ connect( m_pStencilGeometryPanel, SIGNAL(positionChanged(double, double)), this, SLOT(slotChangeStencilPosition(double, double)) );
+ connect( m_pStencilGeometryPanel, SIGNAL(sizeChanged(double, double)), this, SLOT(slotChangeStencilSize(double, double)) );
+// connect(m_pStencilGeometryPanel, SIGNAL(rotationChanged(int)), SLOT(slotChangeStencilRotation(int)));
+
+ connect( m_pDoc, SIGNAL(unitChanged(KoUnit::Unit)), m_pStencilGeometryPanel, SLOT(setUnit(KoUnit::Unit)) );
+}
+
+void KivioView::createBirdEyeDock()
+{
+ m_pBirdEyePanel = new KivioBirdEyePanel(this, this);
+ m_pBirdEyePanel->setCaption(i18n("Overview"));
+ paletteManager()->addWidget(m_pBirdEyePanel, "birdseyepanel", "birdeyedocker");
+}
+
+void KivioView::createLayerDock()
+{
+ m_pLayersPanel = new KivioLayerPanel( this, this);
+ m_pLayersPanel->setCaption(i18n("Layers"));
+ paletteManager()->addWidget(m_pLayersPanel, "layerspanel", "birdeyedocker");
+}
+
+void KivioView::createProtectionDock()
+{
+ m_pProtectionPanel = new KivioProtectionPanel(this,this);
+ m_pProtectionPanel->setCaption(i18n("Protection"));
+ paletteManager()->addWidget(m_pProtectionPanel, "protectionpanel", "geometrydocker");
+}
+
+void KivioView::createObjectListPalette()
+{
+ m_objectListPalette = new Kivio::ObjectListPalette(this);
+ m_objectListPalette->setCaption(i18n("Objects"));
+ paletteManager()->addWidget(m_objectListPalette, "objectlistpalette", "birdeyedocker");
+}
+
+void KivioView::setupActions()
+{
+ KivioStencilSetAction* addStSet = new KivioStencilSetAction( i18n("Add Stencil Set"),
+ "open_stencilset", actionCollection(), "addStencilSet" );
+ connect(addStSet,SIGNAL(activated(const QString&)),SLOT(addStencilSet(const QString&)));
+ connect(this, SIGNAL(updateStencilSetList()), addStSet, SLOT(updateMenu()));
+ connect(addStSet, SIGNAL(showDialog()), this, SLOT(showAddStencilSetDialog()));
+
+ m_alignAndDistribute = new KAction( i18n("Align && Distribute..."), CTRL+ALT+Key_A, this,
+ SLOT(alignStencilsDlg()), actionCollection(), "alignStencils" );
+
+ m_editCut = KStdAction::cut( this, SLOT(cutStencil()), actionCollection(), "cutStencil" );
+ m_editCopy = KStdAction::copy( this, SLOT(copyStencil()), actionCollection(), "copyStencil" );
+ m_editPaste = KStdAction::paste( this, SLOT(pasteStencil()), actionCollection(), "pasteStencil" );
+ connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(clipboardDataChanged()));
+
+ m_selectAll = KStdAction::selectAll(this, SLOT(selectAllStencils()), actionCollection(), "selectAllStencils");
+ m_selectNone = KStdAction::deselect(this, SLOT(unselectAllStencils()), actionCollection(), "unselectAllStencils");
+
+ m_groupAction = new KAction( i18n("Group Selection"), "group", CTRL+Key_G, this, SLOT(groupStencils()), actionCollection(), "groupStencils" );
+ m_groupAction->setWhatsThis(i18n("Group selected objects into a single stencil"));
+ m_ungroupAction = new KAction( i18n("Ungroup"), "ungroup", CTRL+SHIFT+Key_G, this, SLOT(ungroupStencils()), actionCollection(), "ungroupStencils" );
+ m_ungroupAction->setWhatsThis(i18n("Break up a selected group stencil"));
+
+ m_stencilToFront = new KAction( i18n("Bring to Front"), "bring_forward", 0, this, SLOT(bringStencilToFront()), actionCollection(), "bringStencilToFront" );
+ m_stencilToBack = new KAction( i18n("Send to Back"), "send_backward", 0, this, SLOT(sendStencilToBack()), actionCollection(), "sendStencilToBack" );
+
+ m_menuTextFormatAction = new KAction(i18n("&Text..."), 0, 0, this, SLOT(textFormat()),
+ actionCollection(), "textFormat");
+
+ m_menuStencilConnectorsAction = new KAction(i18n("&Stencils && Connectors..."), 0, 0, this, SLOT(stencilFormat()),
+ actionCollection(), "stencilFormat");
+
+ m_arrowHeadsMenuAction = new KAction(i18n("&Arrowheads..."), 0, 0, this, SLOT(arrowHeadFormat()),
+ actionCollection(), "arrowHeadFormat");
+ m_arrowHeadsMenuAction->setWhatsThis(i18n("Arrowheads allow you to add an arrow to the beginning and/or end of a line."));
+
+ /* Create the fg color button */
+ m_setFGColor = new TKSelectColorAction( i18n("Line Color"), TKSelectColorAction::LineColor, actionCollection(), "setFGColor" );
+ m_setFGColor->setWhatsThis(i18n("The line color allows you to choose a color for the lines of the stencils."));
+ connect(m_setFGColor,SIGNAL(activated()),SLOT(setFGColor()));
+ m_setBGColor = new TKSelectColorAction( i18n("Fill Color"), TKSelectColorAction::FillColor, actionCollection(), "setBGColor" );
+ m_setBGColor->setWhatsThis(i18n("You can choose a color for the background of a stencil by using this button."));
+ connect(m_setBGColor,SIGNAL(activated()),SLOT(setBGColor()));
+
+ // Text bar
+ m_setFontFamily = new KFontAction( i18n( "Font Family" ), 0, actionCollection(), "setFontFamily" );
+ connect( m_setFontFamily, SIGNAL(activated(const QString&)), SLOT(setFontFamily(const QString&)) );
+
+ m_setFontSize = new KFontSizeAction( i18n( "Font Size" ), 0, actionCollection(), "setFontSize" );
+ connect( m_setFontSize, SIGNAL( fontSizeChanged( int ) ),
+ this, SLOT( setFontSize(int ) ) );
+
+
+ m_setTextColor = new TKSelectColorAction( i18n("Text Color"), TKSelectColorAction::TextColor, actionCollection(), "setTextColor" );
+ connect( m_setTextColor, SIGNAL(activated()), SLOT(setTextColor()) );
+
+ m_setBold = new KToggleAction( i18n("Toggle Bold Text"), "text_bold", 0, actionCollection(), "setFontBold" );
+ connect( m_setBold, SIGNAL(toggled(bool)), SLOT(toggleFontBold(bool)) );
+
+ m_setItalics = new KToggleAction( i18n("Toggle Italics Text"), "text_italic", 0, actionCollection(), "setFontItalics" );
+ connect( m_setItalics, SIGNAL(toggled(bool)), SLOT(toggleFontItalics(bool)) );
+
+ m_setUnderline = new KToggleAction( i18n("Toggle Underline Text"), "text_under", 0, actionCollection(), "setFontUnderline" );
+ connect( m_setUnderline, SIGNAL(toggled(bool)), SLOT(toggleFontUnderline(bool)));
+
+ m_textAlignLeft = new KToggleAction( i18n( "Align &Left" ), "text_left", CTRL + Key_L,
+ this, SLOT( textAlignLeft() ),
+ actionCollection(), "textAlignLeft" );
+ m_textAlignLeft->setExclusiveGroup( "align" );
+ m_textAlignCenter = new KToggleAction( i18n( "Align &Center" ), "text_center", CTRL + ALT + Key_C,
+ this, SLOT( textAlignCenter() ),
+ actionCollection(), "textAlignCenter" );
+ m_textAlignCenter->setExclusiveGroup( "align" );
+ m_textAlignCenter->setChecked( TRUE );
+ m_textAlignRight = new KToggleAction( i18n( "Align &Right" ), "text_right", CTRL + ALT + Key_R,
+ this, SLOT( textAlignRight() ),
+ actionCollection(), "textAlignRight" );
+ m_textAlignRight->setExclusiveGroup( "align" );
+ m_textVAlignSuper = new KToggleAction( i18n( "Superscript" ), "super", 0,
+ this, SLOT( textSuperScript() ),
+ actionCollection(), "textVAlignSuper" );
+ m_textVAlignSuper->setExclusiveGroup( "valign" );
+ m_textVAlignSub = new KToggleAction( i18n( "Subscript" ), "sub", 0,
+ this, SLOT( textSubScript() ),
+ actionCollection(), "textVAlignSub" );
+ m_textVAlignSub->setExclusiveGroup( "valign" );
+
+ m_lineWidthAction = new KoLineWidthAction(i18n("Line Width"), "linewidth", this, SLOT(setLineWidth(double)),
+ actionCollection(), "setLineWidth");
+ m_lineWidthAction->setUnit(m_pDoc->unit());
+ connect(m_pDoc, SIGNAL(unitChanged(KoUnit::Unit)), m_lineWidthAction, SLOT(setUnit(KoUnit::Unit)));
+
+ m_lineStyleAction = new KoLineStyleAction(i18n("Line Style"), "linestyle", this, SLOT(setLineStyle(int)),
+ actionCollection(), "setLineStyle");
+
+ m_paperLayout = new KAction( i18n("Page Layout..."), 0, this, SLOT(paperLayoutDlg()), actionCollection(), "paperLayout" );
+ m_insertPage = new KAction( i18n("Insert Page"),"item_add", 0, this, SLOT(insertPage()), actionCollection(), "insertPage" );
+ m_removePage = new KAction( i18n("Remove Page"), "item_remove",0,this, SLOT(removePage()), actionCollection(), "removePage" );
+
+ m_renamePage = new KAction( i18n("Rename Page..."), "item_rename",0,this, SLOT(renamePage()), actionCollection(), "renamePage" );
+
+ m_showPage = new KAction( i18n("Show Page..."),0 ,this,SLOT(showPage()), actionCollection(), "showPage" );
+ m_hidePage = new KAction( i18n("Hide Page"),0 ,this,SLOT(hidePage()), actionCollection(), "hidePage" );
+
+ showPageMargins = new KToggleAction( i18n("Show Page Margins"), "view_margins", 0, actionCollection(), "showPageMargins" );
+ connect( showPageMargins, SIGNAL(toggled(bool)), SLOT(togglePageMargins(bool)));
+#if KDE_IS_VERSION(3,2,90)
+ showPageMargins->setCheckedState(i18n("Hide Page Margins"));
+#endif
+
+ showRulers = new KToggleAction( i18n("Show Rulers"), "view_ruler", 0, actionCollection(), "showRulers" );
+ connect( showRulers, SIGNAL(toggled(bool)), SLOT(toggleShowRulers(bool)));
+#if KDE_IS_VERSION(3,2,90)
+ showRulers->setCheckedState(i18n("Hide Rulers"));
+#endif
+
+ // Grid actions
+ showGrid = new KToggleAction( i18n("Show Grid"), "view_grid", 0, actionCollection(), "showGrid" );
+ connect( showGrid, SIGNAL(toggled(bool)), SLOT(toggleShowGrid(bool)));
+#if KDE_IS_VERSION(3,2,90)
+ showGrid->setCheckedState(i18n("Hide Grid"));
+#endif
+
+ KToggleAction* snapGrid = new KToggleAction( i18n("Snap Grid"), "view_grid", 0, actionCollection(), "snapGrid" );
+ connect( snapGrid, SIGNAL(toggled(bool)), SLOT(toggleSnapGrid(bool)));
+
+ // Guides actions
+ showGuides = new KToggleAction( i18n("Guide Lines"), 0, actionCollection(), "showGuides" );
+ connect( showGuides, SIGNAL(toggled(bool)), SLOT(toggleShowGuides(bool)));
+ KAction* addGuide = new KAction(i18n("Add Guide Line..."), 0, this, SLOT(addGuideLine()),
+ actionCollection(), "addGuideLine");
+ connect(showGuides, SIGNAL(toggled(bool)), addGuide, SLOT(setEnabled(bool)));
+ //--
+
+ m_setArrowHeads = new KivioArrowHeadAction(i18n("Arrowheads"), "arrowheads", actionCollection(), "arrowHeads");
+ m_setArrowHeads->setWhatsThis(i18n("Arrowheads allow you to add an arrow to the beginning and/or end of a line."));
+ connect( m_setArrowHeads, SIGNAL(endChanged(int)), SLOT(slotSetEndArrow(int)));
+ connect( m_setArrowHeads, SIGNAL(startChanged(int)), SLOT(slotSetStartArrow(int)));
+
+ KStdAction::preferences(this, SLOT(optionsDialog()), actionCollection(), "options");
+
+ (void) new KAction(i18n("Install Stencil Set..."), 0, this,
+ SLOT(installStencilSet()), actionCollection(), "installStencilSet");
+
+ m_editDelete = new KAction(i18n("Delete"), "editdelete", Key_Delete,
+ this, SLOT(deleteObject()), actionCollection(), "deleteObject");
+}
+
+void KivioView::initActions()
+{
+ togglePageMargins(true);
+ toggleShowRulers(true);
+
+ updateButton();
+
+ m_setFontFamily->setFont( doc()->defaultFont().family() );
+ m_setFontSize->setFontSize( doc()->defaultFont().pointSize() );
+ m_setBold->setChecked( false );
+ m_setItalics->setChecked( false );
+ m_setUnderline->setChecked( false );
+ m_lineWidthAction->setCurrentWidth(1.0);
+ m_lineStyleAction->setCurrentSelection(Qt::SolidLine);
+ showAlign(Qt::AlignHCenter);
+ showVAlign(Qt::AlignVCenter);
+
+ m_pStencilGeometryPanel->setSize(0.0,0.0);
+ m_pStencilGeometryPanel->setPosition(0.0,0.0);
+ m_pStencilGeometryPanel->setRotation(0);
+
+ m_setArrowHeads->setCurrentStartArrow(0);
+ m_setArrowHeads->setCurrentEndArrow(0);
+
+ m_menuTextFormatAction->setEnabled( false );
+ m_menuStencilConnectorsAction->setEnabled( false );
+
+ m_setFGColor->setCurrentColor(QColor(0, 0, 0));
+ m_setBGColor->setCurrentColor(QColor(255, 255, 255));
+ m_setTextColor->setCurrentColor(QColor(0, 0, 0));
+
+ viewZoom(zoomHandler()->zoom());
+}
+
+void KivioView::updateReadWrite( bool readwrite )
+{
+ QValueList<KAction*> actions = actionCollection()->actions();
+ QValueList<KAction*>::ConstIterator aIt = actions.begin();
+ QValueList<KAction*>::ConstIterator aEnd = actions.end();
+ for (; aIt != aEnd; ++aIt )
+ (*aIt)->setEnabled( readwrite );
+ if ( !readwrite )
+ {
+ showPageMargins->setEnabled( true );
+ showRulers->setEnabled( true );
+ showGrid->setEnabled( true );
+ showGuides->setEnabled( true );
+ m_selectAll->setEnabled( true );
+ m_selectNone->setEnabled( true );
+ m_editCopy->setEnabled( true );
+ }
+ m_showPage->setEnabled( true );
+ m_hidePage->setEnabled( true );
+ updateMenuPage();
+}
+
+
+void KivioView::addPage( KivioPage* page )
+{
+ insertPage( page );
+
+ QObject::connect( page, SIGNAL( sig_PageHidden( KivioPage* ) ),
+ this, SLOT( slotPageHidden( KivioPage* ) ) );
+ QObject::connect( page, SIGNAL( sig_PageShown( KivioPage* ) ),
+ this, SLOT( slotPageShown( KivioPage* ) ) );
+
+ updatePageStatusLabel();
+}
+
+void KivioView::insertPage( KivioPage* page )
+{
+ if(!page->isHidden()) {
+ m_pTabBar->addTab(page->pageName());
+ setActivePage(page);
+ updateMenuPage();
+ }
+}
+
+void KivioView::removePage( KivioPage *_t )
+{
+ QString m_pageName=_t->pageName();
+ m_pTabBar->removeTab( _t->pageName() );
+ QString n = m_pDoc->map()->visiblePages().first();
+ setActivePage( m_pDoc->map()->findPage( n ) );
+
+ updatePageStatusLabel();
+}
+
+void KivioView::renamePage()
+{
+ bool ok;
+ QString activeName = m_pActivePage->pageName();
+ QString newName = KInputDialog::getText( i18n("Rename Page"),
+ i18n("Enter page name:"), activeName, &ok, this );
+
+ // Have a different name ?
+ if ( ok ) // User pushed an OK button.
+ {
+ if ( (newName.stripWhiteSpace()).isEmpty() ) // Page name is empty.
+ {
+ KNotifyClient::beep();
+ KMessageBox::information( this, i18n("Page name cannot be empty."),
+ i18n("Change Page Name") );
+ // Recursion
+ renamePage();
+ }
+ else if ( newName != activeName ) // Page name changed.
+ {
+ // Is the name already used
+ if ( !m_pActivePage->setPageName( newName ) )
+ {
+ KNotifyClient::beep();
+ KMessageBox::information( this, i18n("This name is already used."),
+ i18n("Change Page Name") );
+ // Recursion
+ renamePage();
+ }
+ KivioChangePageNameCommand *cmd = new KivioChangePageNameCommand(i18n("Rename Page"), activeName, newName, m_pActivePage);
+ m_pDoc->addCommand( cmd );
+ }
+ }
+}
+
+void KivioView::setActivePage( KivioPage* page )
+{
+ if ( page == m_pActivePage )
+ return;
+
+ if(m_pActivePage) {
+ disconnect(m_pActivePage, SIGNAL(sig_pageLayoutChanged(const KoPageLayout&)), this,
+ SLOT(setRulerPageLayout(const KoPageLayout&)));
+ }
+
+ m_pActivePage = page;
+
+ m_pTabBar->setActiveTab(m_pActivePage->pageName());
+ updateToolBars();
+
+ m_pLayersPanel->reset();
+
+ m_pDoc->updateView(m_pActivePage);
+ setRulerPageLayout(m_pActivePage->paperLayout());
+ connect(m_pActivePage, SIGNAL(sig_pageLayoutChanged(const KoPageLayout&)),
+ SLOT(setRulerPageLayout(const KoPageLayout&)));
+
+ m_pCanvas->guideLines().setGuideLines(m_pActivePage->horizontalGuideLines(),
+ m_pActivePage->verticalGuideLines());
+ m_objectListPalette->updateObjectList();
+}
+
+void KivioView::setActiveSpawnerSet( KivioStencilSpawnerSet *set )
+{
+ if( set == m_pActiveSpawnerSet )
+ return;
+
+ m_pActiveSpawnerSet = set;
+}
+
+void KivioView::slotPageRenamed( KivioPage* page, const QString& old_name )
+{
+ m_pTabBar->renameTab( old_name, page->pageName() );
+}
+
+void KivioView::changePage( const QString& name )
+{
+ if ( m_pActivePage->pageName() == name )
+ return;
+
+ KivioPage *t = m_pDoc->map()->findPage(name);
+ if (!t)
+ return;
+
+ setActivePage(t);
+ updatePageStatusLabel();
+}
+
+void KivioView::insertPage()
+{
+ KivioPage * t =m_pDoc->createPage();
+ m_pDoc->addPage(t);
+ KivioAddPageCommand * cmd = new KivioAddPageCommand(i18n("Insert Page"), t);
+ m_pDoc->addCommand( cmd );
+
+ updatePageStatusLabel();
+}
+
+void KivioView::hidePage()
+{
+ if (!m_pActivePage)
+ return;
+
+ if ( m_pDoc->map()->visiblePages().count() == 1)
+ {
+ KMessageBox::error( this, i18n("You cannot hide the last visible page.") );
+ return;
+ }
+
+ m_pActivePage->setHidden(true);
+ QString activeName = m_pActivePage->pageName();
+
+ m_pTabBar->removeTab( activeName );
+
+ KivioHidePageCommand * cmd = new KivioHidePageCommand(i18n("Hide Page"), m_pActivePage);
+ m_pDoc->addCommand( cmd );
+
+ changePage( m_pDoc->map()->visiblePages().first() );
+ updateMenuPage();
+}
+
+void KivioView::showPage()
+{
+ KivioPageShow* dlg = new KivioPageShow(this,"Page show");
+ if ( !dlg->exec() )
+ {
+ delete dlg;
+ return;
+ }
+ m_pTabBar->setTabs( m_pDoc->map()->visiblePages() );
+ updateMenuPage();
+ delete dlg;
+}
+
+int KivioView::leftBorder() const
+{
+ int retVal = 0;
+
+ if(isShowRulers()) {
+ retVal = vertRuler()->width();
+ }
+
+ return retVal;
+}
+
+int KivioView::rightBorder() const
+{
+ return m_vertScrollBar->width();
+}
+
+int KivioView::topBorder() const
+{
+ int retVal = 0;
+
+ if(isShowRulers()) {
+ retVal = horzRuler()->height();
+ }
+
+ return retVal;
+}
+
+int KivioView::bottomBorder() const
+{
+ return m_horzScrollBar->height();
+}
+
+void KivioView::paperLayoutDlg()
+{
+ KivioPage* page = activePage();
+ KoPageLayout l = page->paperLayout();
+ KoHeadFoot headfoot;
+ int tabs = FORMAT_AND_BORDERS | DISABLE_UNIT;
+ KoUnit::Unit unit = doc()->unit();
+
+ if(KoPageLayoutDia::pageLayout(l, headfoot, tabs, unit))
+ {
+ KivioDoc* doc = page->doc();
+ KivioChangeLayoutCommand * cmd = new KivioChangeLayoutCommand(
+ i18n("Change Page Layout"),page ,page->paperLayout(), l);
+ doc->addCommand( cmd );
+ page->setPaperLayout(l);
+ }
+}
+
+void KivioView::removePage()
+{
+ if ( doc()->map()->count() <= 1 || doc()->map()->visiblePages().count()<=1 ) {
+ QApplication::beep();
+ KMessageBox::sorry( this, i18n("You cannot delete the only page of the document."), i18n("Remove Page") );
+ return;
+ }
+ QApplication::beep();
+ int ret = KMessageBox::warningContinueCancel(this,i18n("You are going to remove the active page.\nDo you want to continue?"),i18n("Remove Page"),KGuiItem(i18n("&Delete"),"editdelete"));
+
+ if ( ret == KMessageBox::Continue ) {
+ KivioPage* tbl = m_pActivePage;
+ KivioRemovePageCommand *cmd = new KivioRemovePageCommand(i18n("Remove Page"), tbl);
+ cmd->execute();
+ doc()->addCommand( cmd );
+ }
+}
+
+void KivioView::slotUpdateView( KivioPage* page )
+{
+ if (page && page != m_pActivePage)
+ return;
+
+ // global view updates (toolbar, statusbar.... actions...)
+ updateToolBars();
+
+ m_pCanvas->update();
+ m_pCanvas->updateScrollBars();
+ vRuler->update();
+ hRuler->update();
+ m_objectListPalette->updateObjectList();
+}
+
+QWidget *KivioView::canvas() const
+{
+ return canvasWidget();
+}
+
+int KivioView::canvasXOffset() const
+{
+ return canvasWidget()->xOffset();
+}
+
+int KivioView::canvasYOffset() const
+{
+ return canvasWidget()->yOffset();
+}
+
+void KivioView::print(KPrinter& ptr)
+{
+ ptr.setFullPage(TRUE);
+ m_pDoc->printContent( ptr );
+}
+
+
+void KivioView::viewZoom(int zoom)
+{
+ if(zoom < 10 || zoom > 2000 || zoom == zoomHandler()->zoom()) {
+ return;
+ }
+
+ KoPoint centerPoint = m_pCanvas->visibleArea().center();
+ zoomHandler()->setZoomAndResolution(zoom, KoGlobal::dpiX(),
+ KoGlobal::dpiY());
+ vRuler->setZoom(zoomHandler()->zoomedResolutionY());
+ hRuler->setZoom(zoomHandler()->zoomedResolutionX());
+ KoPageLayout l = activePage()->paperLayout();
+ vRuler->setFrameStartEnd(zoomHandler()->zoomItY(l.ptTop), zoomHandler()->zoomItY(l.ptHeight - l.ptBottom));
+ hRuler->setFrameStartEnd(zoomHandler()->zoomItX(l.ptLeft), zoomHandler()->zoomItX(l.ptWidth - l.ptRight));
+ setRulerVOffset(m_vertScrollBar->value());
+ setRulerHOffset(m_horzScrollBar->value());
+ KoView::setZoom(zoomHandler()->zoomedResolutionY());
+ m_pCanvas->setViewCenterPoint(centerPoint);
+ m_pCanvas->update();
+ m_pCanvas->updateScrollBars();
+
+ emit zoomChanged(zoom);
+}
+
+KivioPage* KivioView::activePage() const
+{
+ return m_pActivePage;
+}
+
+void KivioView::togglePageMargins(bool b)
+{
+ TOGGLE_ACTION("showPageMargins")->setChecked(b);
+ m_bShowPageMargins = b;
+
+ m_pCanvas->update();
+}
+
+void KivioView::toggleShowRulers(bool b)
+{
+ TOGGLE_ACTION("showRulers")->setChecked(b);
+ m_bShowRulers = b;
+
+ if(b) {
+ hRuler->show();
+ vRuler->show();
+ } else {
+ hRuler->hide();
+ vRuler->hide();
+ }
+}
+
+void KivioView::toggleShowGuides(bool b)
+{
+ TOGGLE_ACTION("showGuides")->setChecked(b);
+ m_bShowGuides = b;
+ m_bSnapGuides = b;
+
+ m_pCanvas->update();
+}
+
+void KivioView::toggleShowGrid(bool b)
+{
+ TOGGLE_ACTION("showGrid")->setChecked(b);
+
+ Kivio::Config::setShowGrid(b);
+ m_pDoc->setModified( true );
+}
+
+void KivioView::slotUpdateGrid()
+{
+ m_pCanvas->update();
+}
+
+void KivioView::toggleSnapGrid(bool b)
+{
+ TOGGLE_ACTION("snapGrid")->setChecked(b);
+
+ Kivio::Config::setSnapGrid(b);
+ m_pDoc->setModified( true );
+}
+
+void KivioView::addStencilSet( const QString& name )
+{
+ m_pDoc->addSpawnerSet(name);
+}
+
+void KivioView::addSpawnerToStackBar( KivioStencilSpawnerSet *pSpawner )
+{
+ if(!pSpawner) {
+ kdDebug(43000) << "KivioView::addSpawnerToStackBar() - NULL pSpawner" << endl;
+ return;
+ }
+
+ if(pSpawner->hidden()) {
+ return;
+ }
+
+ KivioIconView *pView = new KivioIconView(m_pDoc->isReadWrite());
+ QObject::connect(pView, SIGNAL(createNewStencil(KivioStencilSpawner*)), this,
+ SLOT(addStencilFromSpawner(KivioStencilSpawner*)));
+ connect(pView, SIGNAL(stencilSelected(KivioStencilSpawner*)),
+ m_addStencilTool, SLOT(activateNewStencil(KivioStencilSpawner* )));
+
+ pView->setStencilSpawnerSet(pSpawner);
+ m_pStencilBarDockManager->insertStencilSet(pView, pSpawner->name());
+}
+
+void KivioView::setFGColor()
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+ KMacroCommand * macro = new KMacroCommand( i18n("Change Foreground Color"));
+ bool createMacro = false;
+ while( pStencil )
+ {
+ QColor col( m_setFGColor->color());
+
+ if ( col != pStencil->fgColor() )
+ {
+ KivioChangeStencilColorCommand * cmd = new KivioChangeStencilColorCommand( i18n("Change Fg Color"), m_pActivePage, pStencil, pStencil->fgColor(), col, KivioChangeStencilColorCommand::CT_FGCOLOR);
+
+ pStencil->setFGColor( col );
+ macro->addCommand( cmd );
+ createMacro = true;
+ }
+
+ pStencil = m_pActivePage->selectedStencils()->next();
+ }
+
+ if ( createMacro )
+ m_pDoc->addCommand( macro );
+ else
+ delete macro;
+
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::setBGColor()
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+ KMacroCommand * macro = new KMacroCommand( i18n("Change Background Color"));
+ bool createMacro = false;
+
+ while( pStencil )
+ {
+ QColor col( m_setBGColor->color());
+
+ if ( col != pStencil->bgColor() )
+ {
+ KivioChangeStencilColorCommand * cmd = new KivioChangeStencilColorCommand( i18n("Change Bg Color"), m_pActivePage, pStencil, pStencil->bgColor(), col, KivioChangeStencilColorCommand::CT_BGCOLOR);
+
+ pStencil->setBGColor( col );
+ macro->addCommand( cmd );
+ createMacro = true;
+ }
+
+ pStencil = m_pActivePage->selectedStencils()->next();
+ }
+
+ if ( createMacro )
+ m_pDoc->addCommand( macro );
+ else
+ delete macro;
+
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::setTextColor()
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+
+ if (!pStencil)
+ return;
+
+ KMacroCommand * macro = new KMacroCommand( i18n("Change Text Color"));
+ bool createMacro = false;
+ while( pStencil )
+ {
+ QColor col(m_setTextColor->color());
+
+ if ( col != pStencil->textColor() )
+ {
+ KivioChangeStencilColorCommand * cmd = new KivioChangeStencilColorCommand( i18n("Change Text Color"), m_pActivePage, pStencil, pStencil->textColor(), col, KivioChangeStencilColorCommand::CT_TEXTCOLOR);
+ pStencil->setTextColor( col );
+ macro->addCommand( cmd );
+ createMacro = true;
+ }
+
+ pStencil = m_pActivePage->selectedStencils()->next();
+ }
+
+ if ( createMacro )
+ m_pDoc->addCommand( macro );
+ else
+ delete macro;
+
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::setLineWidth(double width)
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+
+ if (!pStencil)
+ return;
+
+ KMacroCommand * macro = new KMacroCommand( i18n("Change Line Width") );
+ bool createMacro = false ;
+
+ while( pStencil )
+ {
+ if ( width != pStencil->lineWidth() )
+ {
+ KivioChangeLineWidthCommand * cmd = new KivioChangeLineWidthCommand( i18n("Change Line Width"),
+ m_pActivePage, pStencil, pStencil->lineWidth(), width );
+
+ pStencil->setLineWidth( width );
+ macro->addCommand( cmd );
+ createMacro = true;
+ }
+
+ pStencil = m_pActivePage->selectedStencils()->next();
+ }
+
+ if ( createMacro ) {
+ m_pDoc->addCommand( macro );
+ } else {
+ delete macro;
+ }
+
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::setLineStyle(int style)
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+
+ if(!pStencil)
+ return;
+
+ KMacroCommand * macro = new KMacroCommand( i18n("Change Line Style") );
+ bool createMacro = false ;
+
+ while(pStencil)
+ {
+ if(style != pStencil->linePattern())
+ {
+ KivioChangeLineStyleCommand * cmd = new KivioChangeLineStyleCommand( i18n("Change Line Style"),
+ m_pActivePage, pStencil, pStencil->linePattern(), style );
+ pStencil->setLinePattern(style);
+ macro->addCommand( cmd );
+ createMacro = true;
+ }
+
+ pStencil = m_pActivePage->selectedStencils()->next();
+ }
+
+ if ( createMacro ) {
+ m_pDoc->addCommand( macro );
+ } else {
+ delete macro;
+ }
+}
+
+void KivioView::groupStencils()
+{
+ m_pActivePage->groupSelectedStencils();
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::ungroupStencils()
+{
+ m_pActivePage->ungroupSelectedStencils();
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::selectAllStencils()
+{
+ m_pActivePage->selectAllStencils();
+ m_pCanvas->repaint();
+}
+
+void KivioView::unselectAllStencils()
+{
+ m_pActivePage->unselectAllStencils();
+ m_pCanvas->repaint();
+}
+
+QColor KivioView::fgColor() const
+{
+ return m_setFGColor->color();
+}
+
+QColor KivioView::bgColor() const
+{
+ return m_setBGColor->color();
+}
+
+double KivioView::lineWidth() const
+{
+ return m_lineWidthAction->currentWidth();
+}
+
+int KivioView::lineStyle() const
+{
+ return m_lineStyleAction->currentSelection();
+}
+
+
+void KivioView::setFontFamily( const QString &str )
+{
+ canvasWidget()->setFocus();
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+
+ QFont f;
+ KMacroCommand * macro = 0L;
+ while( pStencil )
+ {
+ f = pStencil->textFont();
+ f.setFamily( str );
+ if ( pStencil->textFont() != f )
+ {
+ if ( !macro )
+ macro = new KMacroCommand( i18n("Change Stencil Font"));
+
+ KivioChangeStencilFontCommand *cmd = new KivioChangeStencilFontCommand( i18n("Change Stencil Font"), m_pActivePage, pStencil,pStencil->textFont(), f);
+ pStencil->setTextFont( f );
+
+ macro->addCommand( cmd );
+ }
+ pStencil = m_pActivePage->selectedStencils()->next();
+
+ }
+ if ( macro )
+ m_pDoc->addCommand( macro );
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::setFontSize(int size )
+{
+ canvasWidget()->setFocus();
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+
+ QFont f;
+ KMacroCommand * macro = 0L;
+ while( pStencil )
+ {
+ f = pStencil->textFont();
+ f.setPointSize( size );
+ if ( pStencil->textFont() != f )
+ {
+ if ( !macro )
+ macro = new KMacroCommand( i18n("Change Stencil Font"));
+
+ KivioChangeStencilFontCommand *cmd = new KivioChangeStencilFontCommand( i18n("Change Stencil Font"), m_pActivePage, pStencil,pStencil->textFont(), f);
+
+ pStencil->setTextFont( f );
+ macro->addCommand( cmd );
+ }
+ pStencil = m_pActivePage->selectedStencils()->next();
+
+ }
+ if ( macro )
+ m_pDoc->addCommand( macro );
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::toggleFontBold(bool b)
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+
+ QFont f;
+ KMacroCommand * macro = 0L;
+ while( pStencil )
+ {
+ f = pStencil->textFont();
+ f.setBold(b);
+ if ( pStencil->textFont() != f )
+ {
+ if ( !macro )
+ macro = new KMacroCommand( i18n("Change Stencil Font"));
+ KivioChangeStencilFontCommand *cmd = new KivioChangeStencilFontCommand( i18n("Change Stencil Font"), m_pActivePage, pStencil,pStencil->textFont(), f);
+
+ pStencil->setTextFont( f );
+ macro->addCommand( cmd );
+ }
+ pStencil = m_pActivePage->selectedStencils()->next();
+
+ }
+ if ( macro )
+ m_pDoc->addCommand( macro );
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::toggleFontItalics(bool b)
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+
+ QFont f;
+ KMacroCommand * macro = new KMacroCommand( i18n("Change Stencil Font"));
+ while( pStencil )
+ {
+ f = pStencil->textFont();
+ f.setItalic(b);
+ if ( pStencil->textFont() != f )
+ {
+ if ( !macro )
+ macro = new KMacroCommand( i18n("Change Stencil Font"));
+
+ KivioChangeStencilFontCommand *cmd = new KivioChangeStencilFontCommand( i18n("Change Stencil Font"), m_pActivePage, pStencil,pStencil->textFont(), f);
+
+ pStencil->setTextFont( f );
+
+ macro->addCommand( cmd );
+ }
+ pStencil = m_pActivePage->selectedStencils()->next();
+ }
+ if ( macro )
+ m_pDoc->addCommand( macro );
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::toggleFontUnderline( bool b)
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+ KMacroCommand * macro = 0L;
+ QFont f;
+ while( pStencil )
+ {
+ f = pStencil->textFont();
+ f.setUnderline(b);
+ if ( pStencil->textFont() != f )
+ {
+ if ( !macro )
+ macro = new KMacroCommand( i18n("Change Stencil Font"));
+
+ KivioChangeStencilFontCommand *cmd = new KivioChangeStencilFontCommand( i18n("Change Stencil Font"), m_pActivePage, pStencil,pStencil->textFont(), f);
+
+ pStencil->setTextFont( f );
+
+ macro->addCommand( cmd );
+ }
+ pStencil = m_pActivePage->selectedStencils()->next();
+ }
+ if ( macro )
+ m_pDoc->addCommand( macro );
+ m_pDoc->updateView(m_pActivePage);
+}
+
+
+
+void KivioView::updateToolBars()
+{
+ KivioStencil *pStencil;
+ pStencil = m_pActivePage->selectedStencils()->first();
+ m_pStencilGeometryPanel->setEmitSignals(false);
+ m_setArrowHeads->setEmitSignals(false);
+
+ if( !pStencil )
+ {
+ m_setFontFamily->setFont( doc()->defaultFont().family() );
+ m_setFontSize->setFontSize( doc()->defaultFont().pointSize() );
+ m_setBold->setChecked( false );
+ m_setItalics->setChecked( false );
+ m_setUnderline->setChecked( false );
+ m_lineWidthAction->setCurrentWidth(1.0);
+ m_lineStyleAction->setCurrentSelection(Qt::SolidLine);
+ showAlign(Qt::AlignHCenter);
+ showVAlign(Qt::AlignVCenter);
+
+ m_pStencilGeometryPanel->setSize(0.0,0.0);
+ m_pStencilGeometryPanel->setPosition(0.0,0.0);
+ m_pStencilGeometryPanel->setRotation(0);
+
+ m_setArrowHeads->setCurrentStartArrow(0);
+ m_setArrowHeads->setCurrentEndArrow(0);
+
+ m_menuTextFormatAction->setEnabled( false );
+ m_menuStencilConnectorsAction->setEnabled( false );
+ }
+ else
+ {
+ QFont f = pStencil->textFont();
+
+ m_setFontFamily->setFont( f.family() );
+ m_setFontSize->setFontSize( f.pointSize() );
+ m_setBold->setChecked( f.bold() );
+ m_setItalics->setChecked( f.italic() );
+ m_setUnderline->setChecked( f.underline() );
+
+ m_setFGColor->setCurrentColor(pStencil->fgColor());
+ m_setBGColor->setCurrentColor(pStencil->bgColor());
+ m_setTextColor->setCurrentColor(pStencil->textColor());
+
+ m_lineWidthAction->setCurrentWidth(pStencil->lineWidth());
+ m_lineStyleAction->setCurrentSelection(pStencil->linePattern());
+
+ showAlign(pStencil->hTextAlign());
+ showVAlign(pStencil->vTextAlign());
+
+ m_pStencilGeometryPanel->setSize( pStencil->w(), pStencil->h() );
+ m_pStencilGeometryPanel->setPosition( pStencil->x(), pStencil->y() );
+ m_pStencilGeometryPanel->setRotation(pStencil->rotation());
+
+ m_menuTextFormatAction->setEnabled( true );
+ m_menuStencilConnectorsAction->setEnabled( true );
+
+ if ( pStencil->type() != kstConnector )
+ {
+ m_setArrowHeads->setEnabled (false);
+ m_arrowHeadsMenuAction->setEnabled (false);
+ }
+ else
+ {
+ m_setArrowHeads->setEnabled (true);
+ m_arrowHeadsMenuAction->setEnabled (true);
+ m_setArrowHeads->setCurrentStartArrow( pStencil->startAHType() );
+ m_setArrowHeads->setCurrentEndArrow( pStencil->endAHType() );
+ }
+
+ if ( pStencil->type() != kstText )
+ {
+ m_setFGColor->setEnabled (true);
+ m_setBGColor->setEnabled (true);
+ }
+ else
+ {
+ m_setFGColor->setEnabled (false);
+ m_setBGColor->setEnabled (false);
+ }
+ }
+
+ m_pStencilGeometryPanel->setEmitSignals(true);
+ m_setArrowHeads->setEmitSignals(true);
+ m_pProtectionPanel->updateCheckBoxes();
+
+ if(activePage()->selectedStencils()->count() > 1) {
+ m_groupAction->setEnabled(true);
+ m_alignAndDistribute->setEnabled(true);
+ } else {
+ m_groupAction->setEnabled(false);
+ m_alignAndDistribute->setEnabled(false);
+ }
+
+ if(activePage()->selectedStencils()->count() > 0) {
+ m_editCut->setEnabled(true);
+ m_editCopy->setEnabled(true);
+ m_editDelete->setEnabled(true);
+
+ if(activePage()->checkForStencilTypeInSelection(kstGroup)) {
+ m_ungroupAction->setEnabled(true);
+ } else {
+ m_ungroupAction->setEnabled(false);
+ }
+
+ m_stencilToBack->setEnabled(true);
+ m_stencilToFront->setEnabled(true);
+ m_pStencilGeometryPanel->setEnabled(true);
+ m_pProtectionPanel->setEnabled(true);
+ } else {
+ m_editCut->setEnabled(false);
+ m_editCopy->setEnabled(false);
+ m_editDelete->setEnabled(false);
+ m_ungroupAction->setEnabled(false);
+ m_stencilToBack->setEnabled(false);
+ m_stencilToFront->setEnabled(false);
+ m_setArrowHeads->setEnabled(false);
+ m_arrowHeadsMenuAction->setEnabled(false);
+ m_pStencilGeometryPanel->setEnabled(false);
+ m_pProtectionPanel->setEnabled(false);
+ }
+}
+
+void KivioView::slotSetStartArrow( int i )
+{
+ if(!m_pActivePage) {
+ return;
+ }
+
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+
+ KMacroCommand *macro = new KMacroCommand( i18n("Change Begin Arrow"));
+ bool createMacro = false;
+ while( pStencil )
+ {
+ if (pStencil->startAHType()!=i)
+ {
+ pStencil->setStartAHType(i);
+ KivioChangeBeginEndArrowCommand *cmd=new KivioChangeBeginEndArrowCommand( i18n("Change Arrow"),
+ m_pActivePage, pStencil, pStencil->startAHType(), i, true);
+ pStencil->setStartAHType(i);
+
+ macro->addCommand( cmd );
+ createMacro= true;
+ }
+ pStencil = m_pActivePage->selectedStencils()->next();
+ }
+ if (createMacro )
+ m_pDoc->addCommand( macro );
+ else
+ delete macro;
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::slotSetEndArrow( int i )
+{
+ if(!m_pActivePage) {
+ return;
+ }
+
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+ KMacroCommand *macro = new KMacroCommand( i18n("Change End Arrow"));
+ bool createMacro = false;
+
+ while( pStencil )
+ {
+ if (pStencil->endAHType()!=i)
+ {
+ KivioChangeBeginEndArrowCommand *cmd=new KivioChangeBeginEndArrowCommand( i18n("Change Arrow"),
+ m_pActivePage, pStencil, pStencil->endAHType(), i, false);
+ pStencil->setEndAHType(i);
+
+ macro->addCommand( cmd );
+ createMacro= true;
+ }
+ pStencil = m_pActivePage->selectedStencils()->next();
+ }
+ if (createMacro )
+ m_pDoc->addCommand( macro );
+ else
+ delete macro;
+
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::slotSetStartArrowSize()
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+
+ float w = 0.0;
+ float h = 0.0;
+ KMacroCommand *macro = new KMacroCommand( i18n("Change Size of Begin Arrow"));
+ bool createMacro = false;
+ while( pStencil )
+ {
+ if (pStencil->startAHLength() != h || pStencil->startAHWidth()!=w)
+ {
+ KivioChangeBeginEndSizeArrowCommand * cmd = new KivioChangeBeginEndSizeArrowCommand( i18n("Change Size of End Arrow"), m_pActivePage, pStencil, pStencil->startAHLength(),pStencil->startAHWidth(), h,w, true);
+
+ pStencil->setStartAHWidth(w);
+ pStencil->setStartAHLength(h);
+ macro->addCommand( cmd );
+ createMacro= true;
+ }
+ pStencil = m_pActivePage->selectedStencils()->next();
+ }
+ if (createMacro )
+ m_pDoc->addCommand( macro );
+ else
+ delete macro;
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::slotSetEndArrowSize()
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+
+ float w = 0.0;
+ float h = 0.0;
+ KMacroCommand *macro = new KMacroCommand( i18n("Change Size of End Arrow"));
+ bool createMacro = false;
+ while( pStencil )
+ {
+ if ( pStencil->endAHLength() != h || pStencil->endAHWidth()!=w)
+ {
+ KivioChangeBeginEndSizeArrowCommand * cmd = new KivioChangeBeginEndSizeArrowCommand( i18n("Change Size of End Arrow"), m_pActivePage, pStencil, pStencil->endAHLength(),pStencil->endAHWidth(), h,w, false);
+ pStencil->setEndAHWidth(w);
+ pStencil->setEndAHLength(h);
+ macro->addCommand( cmd );
+ createMacro= true;
+ }
+ pStencil = m_pActivePage->selectedStencils()->next();
+ }
+ if ( createMacro )
+ m_pDoc->addCommand( macro );
+ else
+ delete macro;
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::setHParaAlign( int i )
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+ KMacroCommand *macro = new KMacroCommand( i18n("Change Stencil Horizontal Alignment"));
+ bool createMacro = false;
+ while( pStencil )
+ {
+ if ( pStencil->hTextAlign() != i)
+ {
+ KivioChangeStencilHAlignmentCommand * cmd = new KivioChangeStencilHAlignmentCommand( i18n("Change Stencil Horizontal Alignment"), m_pActivePage, pStencil, pStencil->hTextAlign(), i);
+
+ pStencil->setHTextAlign(i);
+ macro->addCommand( cmd );
+ createMacro = true;
+ }
+ pStencil = m_pActivePage->selectedStencils()->next();
+
+ }
+ if (createMacro )
+ m_pDoc->addCommand( macro );
+ else
+ delete macro;
+ m_pDoc->updateView(m_pActivePage);
+}
+
+
+void KivioView::setVParaAlign( int i )
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+ if (!pStencil)
+ return;
+ KMacroCommand *macro = new KMacroCommand( i18n("Change Stencil Vertical Alignment"));
+ bool createMacro = false;
+ while( pStencil )
+ {
+ if ( pStencil->vTextAlign() != i )
+ {
+ KivioChangeStencilVAlignmentCommand * cmd = new KivioChangeStencilVAlignmentCommand( i18n("Change Stencil Vertical Alignment"), m_pActivePage, pStencil, pStencil->vTextAlign(), i);
+ pStencil->setVTextAlign( i );
+ macro->addCommand( cmd );
+ createMacro = true;
+ }
+ pStencil = m_pActivePage->selectedStencils()->next();
+
+ }
+ if ( createMacro )
+ m_pDoc->addCommand( macro );
+ else
+ delete macro;
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::bringStencilToFront()
+{
+ m_pActivePage->bringToFront();
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::sendStencilToBack()
+{
+ m_pActivePage->sendToBack();
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::cutStencil()
+{
+ m_pActivePage->cut();
+ m_pDoc->updateView(m_pActivePage);
+}
+
+void KivioView::copyStencil()
+{
+ m_pActivePage->copy();
+}
+
+void KivioView::pasteStencil()
+{
+ m_pActivePage->paste(this);
+ m_pDoc->updateView(m_pActivePage);
+ m_pCanvas->setFocus();
+}
+
+void KivioView::slotChangeStencilSize(double newW, double newH)
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+
+ if ( pStencil )
+ {
+ KoRect oldPos(pStencil->rect());
+ pStencil->setDimensions(newW, newH);
+ if ((oldPos.width() != pStencil->rect().width()) || (oldPos.height() != pStencil->rect().height()))
+ {
+ KivioMoveStencilCommand * cmd = new KivioMoveStencilCommand( i18n("Resize Stencil"), pStencil, oldPos , pStencil->rect(), m_pCanvas->activePage());
+ m_pDoc->updateView(m_pActivePage);
+ m_pDoc->addCommand( cmd );
+ }
+ }
+}
+
+void KivioView::slotChangeStencilPosition(double newW, double newH)
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+
+ if ( pStencil )
+ {
+ KoRect oldPos(pStencil->rect());
+ pStencil->setPosition(newW, newH);
+ if ((oldPos.x() != pStencil->rect().x()) || (oldPos.y() != pStencil->rect().y()))
+ {
+ KivioMoveStencilCommand * cmd = new KivioMoveStencilCommand( i18n("Move Stencil"), pStencil, oldPos , pStencil->rect(), m_pCanvas->activePage());
+ m_pDoc->updateView(m_pActivePage);
+ m_pDoc->addCommand( cmd );
+ }
+ }
+}
+
+void KivioView::slotChangeStencilRotation(int d)
+{
+ KivioStencil *pStencil = m_pActivePage->selectedStencils()->first();
+
+ if(pStencil && pStencil->rotation() != d) {
+ pStencil->setRotation(d);
+ KivioChangeRotationCommand * cmd = new KivioChangeRotationCommand( i18n("Change Stencil Rotation"), m_pCanvas->activePage(), pStencil, pStencil->rotation() , d);
+ m_pDoc->updateView(m_pActivePage);
+ m_pDoc->addCommand( cmd );
+ }
+}
+
+/**
+ * When passed a spawner, this will create a new stencil at x, y.
+*/
+void KivioView::addStencilFromSpawner( KivioStencilSpawner *pSpawner, double x, double y )
+{
+ KivioStencil *pStencil;
+
+ // Allocate the new stencil and set it's default size/style
+ pStencil = pSpawner->newStencil();
+
+ pStencil->setPosition( x, y );
+
+ // Use default properties if we held ctrl down
+#if KDE_IS_VERSION(3, 4, 0)
+ if(kapp->keyboardMouseState() & Qt::ControlButton) {
+#else
+ if(KApplication::keyboardModifiers() & KApplication::ControlModifier) {
+#endif
+ pStencil->setFGColor(m_setFGColor->color());
+ pStencil->setBGColor(m_setBGColor->color());
+ QFont f = m_setFontFamily->font();
+ f.setPointSize(m_setFontSize->fontSize());
+ f.setBold(m_setBold->isChecked());
+ f.setItalic(m_setItalics->isChecked());
+ f.setUnderline(m_setUnderline->isChecked());
+ pStencil->setTextFont(f);
+ pStencil->setTextColor(m_setTextColor->color());
+ pStencil->setVTextAlign(vTextAlign());
+ pStencil->setHTextAlign(hTextAlign());
+ pStencil->setLinePattern(m_lineStyleAction->currentSelection());
+ pStencil->setLineWidth(m_lineWidthAction->currentWidth());
+ } else {
+ pStencil->setTextFont(doc()->defaultFont());
+ }
+
+ // Unselect everything, then the stencil to the page, and select it
+ m_pActivePage->unselectAllStencils();
+ m_pActivePage->addStencil( pStencil );
+ m_pActivePage->selectStencil( pStencil );
+
+ // Mark the page as modified and repaint
+ m_pDoc->updateView(m_pActivePage);
+ pluginManager()->activateDefaultTool();
+ m_pCanvas->updateAutoGuideLines();
+}
+
+void KivioView::alignStencilsDlg()
+{
+ KivioAlignDialog* dlg = new KivioAlignDialog(this, "AlignDialog");
+
+ if( dlg->exec() == QDialog::Accepted )
+ {
+ m_pActivePage->alignStencils(dlg->align());
+ m_pActivePage->distributeStencils(dlg->distribute());
+
+ m_pCanvas->repaint();
+ }
+
+ delete dlg;
+}
+
+void KivioView::optionsDialog()
+{
+ KivioOptionsDialog dlg(this, "setupDialog");
+ dlg.exec();
+}
+
+void KivioView::toggleStencilGeometry(bool b)
+{
+ TOGGLE_ACTION("stencilGeometry")->setChecked(b);
+}
+
+void KivioView::toggleViewManager(bool b)
+{
+ TOGGLE_ACTION("viewManager")->setChecked(b);
+}
+
+void KivioView::setupPrinter(KPrinter &p)
+{
+ p.setMinMax(1, m_pDoc->map()->pageList().count());
+ KoPageLayout pl = activePage()->paperLayout();
+ p.setPageSize( static_cast<KPrinter::PageSize>( KoPageFormat::printerPageSize( pl.format ) ) );
+
+ if ( pl.orientation == PG_LANDSCAPE || pl.format == PG_SCREEN ) {
+ p.setOrientation( KPrinter::Landscape );
+ } else {
+ p.setOrientation( KPrinter::Portrait );
+ }
+}
+
+void KivioView::popupTabBarMenu( const QPoint & _point )
+{
+ if(!koDocument()->isReadWrite() || !factory())
+ return;
+ static_cast<QPopupMenu*>(factory()->container("menupage_popup",this))->popup(_point);
+}
+
+void KivioView::updateMenuPage()
+{
+ bool state = (doc()->map()->count() > 1 && doc()->map()->visiblePages().count()>1);
+ m_removePage->setEnabled(state);
+ m_hidePage->setEnabled( doc()->map()->visiblePages().count()>1 );
+ m_showPage->setEnabled( doc()->map()->hiddenPages().count()>0 );
+}
+
+void KivioView::updateButton()
+{
+ toggleShowGrid(Kivio::Config::showGrid());
+ toggleSnapGrid(Kivio::Config::snapGrid());
+
+ toggleShowGuides(koDocument()->isReadWrite());
+}
+
+void KivioView::slotPageHidden( KivioPage* /*page*/ )
+{
+ //m_pTabBar->hidePage( page->pageName() );
+}
+
+void KivioView::slotPageShown( KivioPage* /*page*/ )
+{
+ m_pTabBar->setTabs( m_pDoc->map()->visiblePages() );
+}
+
+void KivioView::resetLayerPanel()
+{
+ if ( m_pLayersPanel )
+ {
+ m_pLayersPanel->reset();
+ }
+}
+
+void KivioView::updateProtectPanelCheckBox()
+{
+ if ( m_pProtectionPanel )
+ {
+ m_pProtectionPanel->updateCheckBoxes();
+ }
+}
+
+void KivioView::setMousePos( int mx, int my )
+{
+ vRuler->setMousePos(mx, my);
+ hRuler->setMousePos(mx, my);
+
+ if((mx >= 0) && (my >= 0)) {
+ QString unit = KoUnit::unitName(m_pDoc->unit());
+ KoPoint xy = m_pCanvas->mapFromScreen(QPoint(mx, my));
+ xy.setX(KoUnit::toUserValue(xy.x(), m_pDoc->unit()));
+ xy.setY(KoUnit::toUserValue(xy.y(), m_pDoc->unit()));
+ QString text = i18n("X: %1 %3 Y: %2 %4").arg(KGlobal::_locale->formatNumber(xy.x(), 2))
+ .arg(KGlobal::_locale->formatNumber(xy.y(), 2)).arg(unit).arg(unit);
+ m_coordSLbl->setText(text);
+ }
+}
+
+void KivioView::setRulerUnit(KoUnit::Unit u)
+{
+ vRuler->setUnit(u);
+ hRuler->setUnit(u);
+}
+
+void KivioView::setRulerHOffset(int h)
+{
+ if(hRuler) {
+ hRuler->setOffset(h - m_pCanvas->pageOffsetX(), 0);
+ }
+}
+
+void KivioView::setRulerVOffset(int v)
+{
+ if(vRuler) {
+ vRuler->setOffset(0, v - m_pCanvas->pageOffsetY());
+ }
+}
+
+void KivioView::rulerChangedUnit(KoUnit::Unit u)
+{
+ m_pDoc->setUnit(u);
+}
+
+KoZoomHandler* KivioView::zoomHandler() const
+{
+ return m_zoomHandler;
+}
+
+void KivioView::setRulerPageLayout(const KoPageLayout& l)
+{
+ vRuler->setPageLayout(l);
+ hRuler->setPageLayout(l);
+ vRuler->setFrameStartEnd(zoomHandler()->zoomItY(l.ptTop), zoomHandler()->zoomItY(l.ptHeight - l.ptBottom));
+ hRuler->setFrameStartEnd(zoomHandler()->zoomItX(l.ptLeft), zoomHandler()->zoomItX(l.ptWidth - l.ptRight));
+ setRulerVOffset(m_vertScrollBar->value());
+ setRulerHOffset(m_horzScrollBar->value());
+ m_pStencilGeometryPanel->setPageLayout(l);
+}
+
+void KivioView::viewZoom(const QString& s)
+{
+ QString z(s);
+ z.remove('%');
+ z.simplifyWhiteSpace();
+ bool ok = false;
+ int zoom = z.toInt(&ok);
+
+ if(!ok || zoom < 10 || zoom > 2000) {
+ zoom = zoomHandler()->zoom();
+ }
+
+ if(zoom != zoomHandler()->zoom()) {
+ viewZoom(zoom);
+ }
+
+ canvasWidget()->setFocus();
+}
+
+void KivioView::textAlignLeft()
+{
+ if ( m_textAlignLeft->isChecked() ) {
+ setHParaAlign( Qt::AlignLeft );
+ } else {
+ m_textAlignLeft->setChecked( true );
+ }
+}
+
+void KivioView::textAlignCenter()
+{
+ if ( m_textAlignCenter->isChecked() ) {
+ setHParaAlign( Qt::AlignHCenter );
+ } else {
+ m_textAlignCenter->setChecked( true );
+ }
+}
+
+void KivioView::textAlignRight()
+{
+ if ( m_textAlignRight->isChecked() ) {
+ setHParaAlign( Qt::AlignRight );
+ } else {
+ m_textAlignRight->setChecked( true );
+ }
+}
+
+void KivioView::textSuperScript()
+{
+ if ( m_textVAlignSuper->isChecked() ) {
+ setVParaAlign( Qt::AlignTop );
+ } else {
+ if ( !m_textVAlignSub->isChecked() ) {
+ setVParaAlign( Qt::AlignVCenter );
+ }
+ }
+}
+
+void KivioView::textSubScript()
+{
+ if ( m_textVAlignSub->isChecked() ) {
+ setVParaAlign( Qt::AlignBottom );
+ } else {
+ if ( !m_textVAlignSuper->isChecked() ) {
+ setVParaAlign( Qt::AlignVCenter );
+ }
+ }
+}
+
+void KivioView::showAlign( int align )
+{
+ switch ( align ) {
+ case Qt::AlignAuto: // In left-to-right mode it's align left. TODO: alignright if text->isRightToLeft()
+ kdWarning(43000) << k_funcinfo << "shouldn't be called with AlignAuto" << endl;
+ // fallthrough
+ case Qt::AlignLeft:
+ m_textAlignLeft->setChecked( true );
+ break;
+ case Qt::AlignHCenter:
+ m_textAlignCenter->setChecked( true );
+ break;
+ case Qt::AlignRight:
+ m_textAlignRight->setChecked( true );
+ break;
+ }
+}
+
+void KivioView::showVAlign( int align )
+{
+ switch(align) {
+ case Qt::AlignTop:
+ m_textVAlignSuper->setChecked(true);
+ break;
+ case Qt::AlignVCenter:
+ m_textVAlignSuper->setChecked(false);
+ m_textVAlignSub->setChecked(false);
+ break;
+ case Qt::AlignBottom:
+ m_textVAlignSub->setChecked(true);
+ break;
+ }
+}
+
+void KivioView::textFormat()
+{
+ KivioTextFormatDlg dlg(this);
+ KivioStencil* stencil = activePage()->selectedStencils()->getLast();
+
+ if(stencil) {
+ dlg.setFont(stencil->textFont());
+ dlg.setTextColor(stencil->textColor());
+ dlg.setHAlign(stencil->hTextAlign());
+ dlg.setVAlign(stencil->vTextAlign());
+ } else {
+ dlg.setFont(doc()->defaultFont());
+ dlg.setTextColor(QColor(0, 0, 0));
+ dlg.setHAlign(Qt::AlignHCenter);
+ dlg.setVAlign(Qt::AlignVCenter);
+ }
+
+ if(dlg.exec()) {
+ QPtrListIterator<KivioStencil> it(*activePage()->selectedStencils());
+
+ while((stencil = it.current()) != 0) {
+ ++it;
+ stencil->setTextFont(dlg.font());
+ stencil->setTextColor(dlg.textColor());
+ stencil->setVTextAlign(dlg.valign());
+ stencil->setHTextAlign(dlg.halign());
+ }
+
+ updateToolBars();
+ }
+}
+
+void KivioView::stencilFormat()
+{
+ KivioStencilFormatDlg dlg(this);
+ KivioStencil* stencil = activePage()->selectedStencils()->getLast();
+ KivioLineStyle ls;
+
+ if(stencil) {
+ ls = stencil->lineStyle();
+ dlg.setFillColor(stencil->bgColor());
+ dlg.setFillPattern(stencil->fillPattern());
+ } else {
+ dlg.setLineWidth(1.0, m_pDoc->unit());
+ dlg.setLineColor(QColor(0, 0, 0));
+ }
+
+ dlg.setLineWidth(ls.width(), m_pDoc->unit());
+ dlg.setLineColor(ls.color());
+ dlg.setLinePattern(ls.style());
+ dlg.setLineEndStyle(ls.capStyle());
+
+ if(dlg.exec()) {
+ QPtrListIterator<KivioStencil> it(*activePage()->selectedStencils());
+
+ while((stencil = it.current()) != 0) {
+ ++it;
+ stencil->setLineWidth(dlg.lineWidth());
+ stencil->setFGColor(dlg.lineColor());
+ stencil->setLinePattern(dlg.linePattern());
+ stencil->setBGColor(dlg.fillColor());
+ stencil->setFillPattern(dlg.fillPattern());
+ }
+
+ updateToolBars();
+ }
+}
+
+void KivioView::arrowHeadFormat()
+{
+ KivioArrowHeadFormatDlg dlg(this);
+ dlg.setUnit(m_pDoc->unit());
+ dlg.setStartAHType(0);
+ dlg.setEndAHType(0);
+ dlg.setStartAHWidth(10.0);
+ dlg.setStartAHHeight(10.0);
+ dlg.setEndAHWidth(10.0);
+ dlg.setEndAHHeight(10.0);
+
+ KivioStencil* stencil = activePage()->selectedStencils()->getLast();
+
+ if(stencil) {
+ if(stencil->type() == kstConnector) {
+ dlg.setUnit(m_pDoc->unit());
+ dlg.setStartAHType(stencil->startAHType());
+ dlg.setEndAHType(stencil->endAHType());
+ dlg.setStartAHWidth(stencil->startAHWidth());
+ dlg.setStartAHHeight(stencil->startAHLength());
+ dlg.setEndAHWidth(stencil->endAHWidth());
+ dlg.setEndAHHeight(stencil->endAHLength());
+ }
+ }
+
+ if(dlg.exec()) {
+ QPtrListIterator<KivioStencil> it(*activePage()->selectedStencils());
+
+ while((stencil = it.current()) != 0) {
+ ++it;
+
+ if(stencil->type() == kstConnector) {
+ stencil->setStartAHType(dlg.startAHType());
+ stencil->setEndAHType(dlg.endAHType());
+ stencil->setStartAHWidth(dlg.startAHWidth());
+ stencil->setStartAHLength(dlg.startAHHeight());
+ stencil->setEndAHWidth(dlg.endAHWidth());
+ stencil->setEndAHLength(dlg.endAHHeight());
+ }
+ }
+
+ updateToolBars();
+ }
+}
+
+Kivio::PluginManager* KivioView::pluginManager()
+{
+ return m_pluginManager;
+}
+
+void KivioView::clipboardDataChanged()
+{
+ QMimeSource* data = QApplication::clipboard()->data();
+ KivioDragObject decoder(this);
+ bool paste = decoder.canDecode(data);
+ m_editPaste->setEnabled(paste);
+}
+
+void KivioView::partActivateEvent(KParts::PartActivateEvent* event)
+{
+ if((event->widget() == this) && event->activated()) {
+ updateToolBars();
+ clipboardDataChanged();
+ }
+
+ if(event->widget() == this) {
+ m_pluginManager->setEventDelegationEnabled(event->activated());
+ m_pStencilBarDockManager->setAllStackBarsShown(event->activated());
+ }
+
+ KoView::partActivateEvent(event);
+}
+
+void KivioView::initStatusBarProgress()
+{
+ if(!m_statusBarProgress) {
+ m_statusBarProgress = new QProgressBar(100, this);
+ addStatusBarItem(m_statusBarProgress);
+ }
+
+ m_statusBarProgress->reset();
+}
+
+void KivioView::setStatusBarProgress(int progress)
+{
+ if(m_statusBarProgress) {
+ m_statusBarProgress->setProgress(progress);
+ }
+}
+
+void KivioView::removeStatusBarProgress()
+{
+ if(m_statusBarProgress) {
+ removeStatusBarItem(m_statusBarProgress);
+ delete m_statusBarProgress;
+ m_statusBarProgress = 0;
+ }
+}
+
+void KivioView::installStencilSet()
+{
+ Kivio::StencilSetInstaller dlg(this);
+ dlg.exec();
+ emit updateStencilSetList();
+}
+
+int KivioView::hTextAlign()
+{
+ if(m_textAlignRight->isChecked()) {
+ return Qt::AlignRight;
+ } else if(m_textAlignLeft->isChecked()) {
+ return Qt::AlignLeft;
+ }
+
+ return Qt::AlignHCenter;
+}
+
+int KivioView::vTextAlign()
+{
+ if(m_textVAlignSub->isChecked() && !m_textVAlignSuper->isChecked()) {
+ return Qt::AlignBottom;
+ } else if(!m_textVAlignSub->isChecked() && m_textVAlignSuper->isChecked()) {
+ return Qt::AlignTop;
+ }
+
+ return Qt::AlignVCenter;
+}
+
+void KivioView::updatePageStatusLabel()
+{
+ QString text = i18n("Page %1/%2").arg(m_pDoc->map()->pageList().find(activePage()) + 1).arg(m_pDoc->map()->count());
+ m_pageCountSLbl->setText(text);
+}
+
+void KivioView::setStatusBarInfo(const QString& text)
+{
+ m_infoSLbl->setText(text);
+}
+
+void KivioView::loadingFinished()
+{
+ m_pTabBar->clear();
+ QPtrList<KivioPage> pages = m_pDoc->map()->pageList();
+ QPtrListIterator<KivioPage> it(pages);
+ KivioPage* page;
+
+ while((page = it.current()) != 0) {
+ ++it;
+ addPage(page);
+ }
+
+ setActivePage(m_pDoc->map()->firstPage());
+ m_pTabBar->setActiveTab(activePage()->pageName());
+
+ if( m_pDoc->isReadWrite() ) // only if not embedded in Konqueror
+ {
+ KivioStencilSpawnerSet *pSet;
+ pSet = m_pDoc->spawnerSets()->first();
+ while( pSet )
+ {
+ addSpawnerToStackBar( pSet );
+ pSet = m_pDoc->spawnerSets()->next();
+ }
+ }
+}
+
+void KivioView::moveTab(unsigned tab, unsigned target)
+{
+ QStringList tabs = m_pTabBar->tabs();
+ QString tabTitle = tabs[tab];
+ QString targetTitle = tabs[target];
+
+ if(target >= static_cast<unsigned>(m_pDoc->map()->count())) {
+ targetTitle = m_pDoc->map()->lastPage()->pageName();
+ }
+
+ m_pDoc->map()->movePage(tabTitle, targetTitle, target < static_cast<unsigned>(m_pDoc->map()->count()));
+ m_pTabBar->moveTab(tab, target);
+}
+
+void KivioView::deleteObject()
+{
+ activePage()->deleteSelectedStencils();
+ m_pDoc->updateView(activePage());
+}
+
+void KivioView::addGuideLine()
+{
+ KoPageLayout pl = activePage()->paperLayout();
+ KoRect pageRect(0.0, 0.0, pl.ptWidth, pl.ptHeight);
+ KoPoint pos(0.0, 0.0);
+ KoGuideLineDia dlg(this, pos, pageRect, m_pDoc->unit(), "addGuideDialog");
+
+ if(dlg.exec() == QDialog::Accepted) {
+ activePage()->addGuideLine(dlg.orientation(), dlg.pos());
+ m_pDoc->updateGuideLines(activePage());
+ }
+}
+
+void KivioView::showAddStencilSetDialog()
+{
+ if(!m_addStencilSetDialog) {
+ m_addStencilSetDialog = new Kivio::AddStencilSetDialog(this, "AddStencilSetDialog");
+ connect(m_addStencilSetDialog, SIGNAL(addStencilSet(const QString&)), this, SLOT(addStencilSet(const QString&)));
+ connect(this, SIGNAL(updateStencilSetList()), m_addStencilSetDialog, SLOT(updateList()));
+ }
+
+ m_addStencilSetDialog->show();
+}
+
+void KivioView::updateRulers()
+{
+ m_pCanvas->updateScrollBars();
+ setRulerVOffset(m_vertScrollBar->value());
+ setRulerHOffset(m_horzScrollBar->value());
+}
+
+#include "kivio_view.moc"