X-Git-Url: https://git.sven.stormbind.net/?a=blobdiff_plain;f=mainwindow.cpp;fp=mainwindow.cpp;h=0000000000000000000000000000000000000000;hb=d483bd8e6523c23c6f1d8908a2e0611c2bc9ff4f;hp=7a53f53ca4f2e3ca8c4fa7618055d46f835a933f;hpb=7dfa3fe589d1722d49681f42cdb0bf1e6efb5223;p=sven%2Fvym.git diff --git a/mainwindow.cpp b/mainwindow.cpp deleted file mode 100644 index 7a53f53..0000000 --- a/mainwindow.cpp +++ /dev/null @@ -1,6159 +0,0 @@ -#include "mainwindow.h" - -#include -#include - -#ifndef Q_OS_WIN -#include -#endif - -#if defined(VYM_DBUS) -#include "adaptorvym.h" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "aboutdialog.h" -#include "branchpropeditor.h" -#include "branchitem.h" -#include "command.h" -#include "downloadagent.h" -#include "exportoofiledialog.h" -#include "exports.h" -#include "file.h" -#include "findresultwidget.h" -#include "findresultmodel.h" -#include "flagrow.h" -#include "headingeditor.h" -#include "historywindow.h" -#include "imports.h" -#include "lineeditdialog.h" -#include "macros.h" -#include "mapeditor.h" -#include "misc.h" -#include "options.h" -#include "vymprocess.h" -#include "scripteditor.h" -#include "settings.h" -#include "shortcuts.h" -#include "noteeditor.h" -#include "task.h" -#include "taskeditor.h" -#include "taskmodel.h" -#include "treeeditor.h" -#include "version.h" -#include "warningdialog.h" -#include "xlinkitem.h" - -QPrinter *printer; - -//#include - -#if defined(VYM_DBUS) -#include -#endif - -extern NoteEditor *noteEditor; -extern HeadingEditor *headingEditor; -extern ScriptEditor *scriptEditor; -extern Main *mainWindow; -extern FindResultWidget *findResultWidget; -extern TaskEditor *taskEditor; -extern TaskModel *taskModel; -extern Macros macros; -extern QString tmpVymDir; -extern QString clipboardDir; -extern QString clipboardFile; -extern bool clipboardEmpty; -extern int statusbarTime; -extern FlagRow *standardFlagsMaster; -extern FlagRow *systemFlagsMaster; -extern QString vymName; -extern QString vymVersion; -extern QString vymPlatform; -extern QString vymBuildDate; -extern QString localeName; -extern bool debug; -extern bool testmode; -extern QTextStream vout; -extern bool bugzillaClientAvailable; -extern Switchboard switchboard; - - -extern QList modelCommands; - -QMenu* branchAddContextMenu; -QMenu* branchContextMenu; -QMenu* branchLinksContextMenu; -QMenu* branchRemoveContextMenu; -QMenu* branchXLinksContextMenuEdit; -QMenu* branchXLinksContextMenuFollow; -QMenu* canvasContextMenu; -QMenu* floatimageContextMenu; -QMenu* targetsContextMenu; -QMenu* taskContextMenu; -QMenu* fileLastMapsMenu; -QMenu* fileImportMenu; -QMenu* fileExportMenu; - -extern Settings settings; -extern Options options; -extern ImageIO imageIO; - -extern QDir vymBaseDir; -extern QDir lastImageDir; -extern QDir lastMapDir; -#if defined(Q_OS_WIN32) -extern QDir vymInstallDir; -#endif -extern QString zipToolPath; - -Main::Main(QWidget* parent, Qt::WindowFlags f) : QMainWindow(parent,f) -{ - mainWindow = this; - - setWindowTitle ("VYM - View Your Mind"); - - shortcutScope = tr("Main window","Shortcut scope"); - - // Load window settings - #if defined(Q_OS_WIN32) - if (settings.value("/mainwindow/geometry/maximized", false).toBool()) - { - setWindowState(Qt::WindowMaximized); - } - else - #endif - { - resize (settings.value("/mainwindow/geometry/size", QSize (1024,900)).toSize()); - move (settings.value("/mainwindow/geometry/pos", QPoint(50,50)).toPoint()); - } - - // Sometimes we may need to remember old selections - prevSelection=""; - - // Default color - currentColor=Qt::black; - - // Create unique temporary directory - bool ok; - tmpVymDir=makeTmpDir (ok,"vym"); - if (!ok) - { - qWarning ("Mainwindow: Could not create temporary directory, failed to start vym"); - exit (1); - } - if (debug) qDebug ()<<"tmpDir="<setTabsClosable( true ); - connect(tabWidget, SIGNAL(tabCloseRequested(int)), - this, SLOT( fileCloseMap(int) )); - - layout->addWidget (tabWidget); - - switchboard.addGroup("MainWindow",tr("Main window","Shortcut group")); - switchboard.addGroup("MapEditor",tr("Map Editors","Shortcut group")); - switchboard.addGroup("TextEditor",tr("Text Editors","Shortcut group")); - - // Setup actions - setupFileActions(); - setupEditActions(); - setupSelectActions(); - setupFormatActions(); - setupViewActions(); - setupModeActions(); - setupNetworkActions(); - setupSettingsActions(); - setupContextMenus(); - setupMacros(); - setupToolbars(); - setupFlagActions(); - - // Dock widgets /////////////////////////////////////////////// - QDockWidget *dw; - dw = new QDockWidget (); - dw->setWidget (noteEditor); - dw->setObjectName ("NoteEditor"); - dw->setWindowTitle(noteEditor->getEditorTitle() ); - dw->hide(); - noteEditorDW=dw; - addDockWidget (Qt::LeftDockWidgetArea,dw); - - dw = new QDockWidget (); - dw->setWidget (headingEditor); - dw->setObjectName ("HeadingEditor"); - dw->setWindowTitle(headingEditor->getEditorTitle() ); - dw->hide(); - headingEditorDW=dw; - addDockWidget (Qt::BottomDockWidgetArea,dw); - - dw = new QDockWidget (tr("Script Editor")); - dw->setWidget (scriptEditor); - dw->setObjectName ("ScriptEditor"); - dw->hide(); - scriptEditorDW=dw; - addDockWidget (Qt::LeftDockWidgetArea,dw); - - findResultWidget=new FindResultWidget (); - dw= new QDockWidget (tr ("Search results list","FindResultWidget")); - dw->setWidget (findResultWidget); - dw->setObjectName ("FindResultWidget"); - dw->hide(); - addDockWidget (Qt::RightDockWidgetArea,dw); - connect ( - findResultWidget, SIGNAL (noteSelected (QString, int)), - this, SLOT (selectInNoteEditor (QString, int))); - connect ( - findResultWidget, SIGNAL (findPressed (QString) ), - this, SLOT (editFindNext(QString) ) ); - - scriptEditor = new ScriptEditor(this); - dw= new QDockWidget (tr ("Script Editor","ScriptEditor")); - dw->setWidget (scriptEditor); - dw->setObjectName ("ScriptEditor"); - dw->hide(); - addDockWidget (Qt::LeftDockWidgetArea,dw); - - branchPropertyEditor = new BranchPropertyEditor(); - dw = new QDockWidget (tr("Property Editor","PropertyEditor")); - dw->setWidget (branchPropertyEditor); - dw->setObjectName ("PropertyEditor"); - dw->hide(); - addDockWidget (Qt::LeftDockWidgetArea,dw); - - historyWindow=new HistoryWindow(); - dw = new QDockWidget (tr("History window","HistoryWidget")); - dw->setWidget (historyWindow); - dw->setObjectName ("HistoryWidget"); - dw->hide(); - addDockWidget (Qt::RightDockWidgetArea,dw); - connect (dw, SIGNAL (visibilityChanged(bool ) ), this, SLOT (updateActions())); - - // Connect NoteEditor, so that we can update flags if text changes - connect (noteEditor, SIGNAL (textHasChanged() ), this, SLOT (updateNoteFlag())); - connect (noteEditor, SIGNAL (windowClosed() ), this, SLOT (updateActions())); - - // Connect heading editor - connect (headingEditor, SIGNAL (textHasChanged() ), this, SLOT (updateHeading())); - - connect( scriptEditor, SIGNAL( runScript ( QString ) ), this, SLOT( execute( QString ) ) ); - - // Switch back to MapEditor using Esc - QAction* a = new QAction(this); - a->setShortcut (Qt::Key_Escape); - a->setShortcutContext (Qt::ApplicationShortcut); - a->setCheckable(false); - a->setEnabled (true); - addAction(a); - connect (a , SIGNAL (triggered() ), this, SLOT (setFocusMapEditor())); - - // Create TaskEditor after setting up above actions, allow cloning - taskEditor = new TaskEditor (); - dw= new QDockWidget (tr ("Task list","TaskEditor")); - dw->setWidget (taskEditor); - dw->setObjectName ("TaskEditor"); - dw->hide(); - addDockWidget (Qt::TopDockWidgetArea,dw); - connect (dw, SIGNAL (visibilityChanged(bool ) ), this, SLOT (updateActions())); - //FIXME -0 connect (taskEditor, SIGNAL (focusReleased() ), this, SLOT (setFocusMapEditor())); - - if (options.isOn("shortcutsLaTeX")) switchboard.printLaTeX(); - - if (settings.value( "/mainwindow/showTestMenu",false).toBool()) setupTestActions(); - setupHelpActions(); - - // Status bar and progress bar there - statusBar(); - progressMax=0; - progressCounter=0; - progressCounterTotal=0; - - progressDialog.setAutoReset(false); - progressDialog.setAutoClose(false); - progressDialog.setMinimumWidth (600); - //progressDialog.setWindowModality (Qt::WindowModal); // That forces mainwindo to update and slows down - progressDialog.setCancelButton (NULL); - - restoreState (settings.value("/mainwindow/state",0).toByteArray()); - - // Global Printer - printer=new QPrinter (QPrinter::HighResolution ); - - // Enable testmenu - //settings.setValue( "mainwindow/showTestMenu", true); - updateGeometry(); - -#if defined(VYM_DBUS) - // Announce myself on DBUS - new AdaptorVym (this); // Created and not deleted as documented in Qt - if (!QDBusConnection::sessionBus().registerObject ("/vym",this)) - qWarning ("MainWindow: Couldn't register DBUS object!"); -#endif - -} - -Main::~Main() -{ - // qDebug()<<"Destr Mainwindow"<isChecked()); - settings.setValue ("/mainwindow/view/SmoothPixmapTransform",actionViewToggleSmoothPixmapTransform->isChecked()); - settings.setValue( "/system/autosave/use",actionSettingsToggleAutosave->isChecked() ); - settings.setValue ("/system/autosave/ms", settings.value("/system/autosave/ms",60000)); - settings.setValue ("/mainwindow/autoLayout/use",actionSettingsToggleAutoLayout->isChecked() ); - settings.setValue( "/mapeditor/editmode/autoSelectNewBranch",actionSettingsAutoSelectNewBranch->isChecked() ); - settings.setValue( "/system/writeBackupFile",actionSettingsWriteBackupFile->isChecked() ); - - settings.setValue("/system/printerName",printer->printerName()); - settings.setValue("/system/printerFormat",printer->outputFormat()); - settings.setValue("/system/printerFileName",printer->outputFileName()); - settings.setValue( "/mapeditor/editmode/autoSelectText",actionSettingsAutoSelectText->isChecked() ); - settings.setValue( "/mapeditor/editmode/autoEditNewBranch",actionSettingsAutoEditNewBranch->isChecked() ); - settings.setValue( "/mapeditor/editmode/useFlagGroups",actionSettingsUseFlagGroups->isChecked() ); - settings.setValue( "/export/useHideExport",actionSettingsUseHideExport->isChecked() ); - settings.setValue( "/system/version", vymVersion ); - settings.setValue( "/system/builddate", vymBuildDate ); - } - // - // call the destructors - delete noteEditorDW; - delete historyWindow; - delete branchPropertyEditor; - - // Remove temporary directory - removeDir (QDir(tmpVymDir)); -} - -void Main::loadCmdLine() -{ - QStringList flist=options.getFileList(); - QStringList::Iterator it=flist.begin(); - - initProgressCounter (flist.count()); - while (it !=flist.end() ) - { - FileType type=getMapType (*it); - fileLoad (*it, NewMap,type); - *it++; - } - removeProgressCounter(); -} - - -void Main::statusMessage(const QString &s) -{ - // Surpress messages while progressdialog during - // load is active - statusBar()->showMessage( s,statusbarTime); -} - -void Main::setProgressMaximum (int max) { - if (progressCounter==0) - { - // Init range only on first time, when progressCounter still 0 - // Normalize range to 1000 - progressDialog.setRange (0,1000); - progressDialog.setValue (1); - } - progressCounter++; // Another map is loaded - - progressMax=max*1000; - QApplication::processEvents(); -} - -void Main::addProgressValue (float v) - -{ - int progress_value= (v + progressCounter -1)*1000/progressCounterTotal; -/* - qDebug() << "addVal v="<addPar (Command::Int, true, "Index of new branch"); - modelCommands.append(c); - - c=new Command ("addBranchBefore",Command::Branch); - modelCommands.append(c); - - c=new Command ("addMapCenter",Command::Any); - c->addPar (Command::Double,false, "Position x"); - c->addPar (Command::Double,false, "Position y"); - modelCommands.append(c); - - c=new Command ("addMapInsert",Command::Any); - c->addPar (Command::String,false, "Filename of map to load"); - c->addPar (Command::Int,true, "Index where map is inserted"); - c->addPar (Command::Int,true, "Content filter"); - modelCommands.append(c); - - c=new Command ("addMapReplace",Command::Branch); - c->addPar (Command::String,false, "Filename of map to load"); - modelCommands.append(c); - - c=new Command ("addSlide",Command::Branch); - modelCommands.append(c); - - c=new Command ("addXLink",Command::BranchLike); - c->addPar (Command::String, false, "Begin of XLink"); - c->addPar (Command::String, false, "End of XLink"); - c->addPar (Command::Int, true, "Width of XLink"); - c->addPar (Command::Color, true, "Color of XLink"); - c->addPar (Command::String, true, "Penstyle of XLink"); - modelCommands.append(c); - - c=new Command ("branchCount",Command::Any); - modelCommands.append(c); - - c=new Command ("centerCount",Command::BranchLike); - modelCommands.append(c); - - c=new Command ("centerOnID",Command::Any); - c->addPar (Command::String,false, "UUID of object to center on"); - modelCommands.append(c); - - c=new Command ("clearFlags",Command::BranchLike); - modelCommands.append(c); - - c=new Command ("colorBranch",Command::Branch); - c->addPar (Command::Color,true, "New color"); - modelCommands.append(c); - - c=new Command ("colorSubtree",Command::Branch); - c->addPar (Command::Color,true, "New color"); - modelCommands.append(c); - - c=new Command ("copy",Command::BranchOrImage); - modelCommands.append(c); - - c=new Command ("cut",Command::BranchOrImage); - modelCommands.append(c); - - c=new Command ("cycleTask",Command::BranchOrImage); - c->addPar (Command::Bool,true, "True, if cycling in reverse order"); - modelCommands.append(c); - - c=new Command ("delete",Command::TreeItem); - modelCommands.append(c); - - c=new Command ("deleteChildren",Command::Branch); - modelCommands.append(c); - - c=new Command ("deleteKeepChildren",Command::Branch); - modelCommands.append(c); - - c=new Command ("deleteSlide",Command::Any); - c->addPar (Command::Int,false,"Index of slide to delete"); - modelCommands.append(c); - - c=new Command ("exportAO",Command::Any); - c->addPar (Command::String,false,"Filename for export"); - modelCommands.append(c); - - c=new Command ("exportASCII",Command::Any); - c->addPar (Command::String,false,"Filename for export"); - c->addPar (Command::Bool,false,"Flag, if tasks should be appended"); - modelCommands.append(c); - - c=new Command ("exportCSV",Command::Any); - c->addPar (Command::String,false,"Filename for export"); - modelCommands.append(c); - - c=new Command ("exportHTML",Command::Any); - c->addPar (Command::String,false,"Path used for export"); - c->addPar (Command::String,false,"Filename for export"); - modelCommands.append(c); - - c=new Command ("exportImage",Command::Any); - c->addPar (Command::String,false,"Filename for export"); - c->addPar (Command::String,true,"Image format"); - modelCommands.append(c); - - c=new Command ("exportImpress",Command::Any); - c->addPar (Command::String,false,"Filename for export"); - c->addPar (Command::String,false,"Configuration file for export"); - modelCommands.append(c); - - c=new Command ("exportLast",Command::Any); - modelCommands.append(c); - - c=new Command ("exportLaTeX",Command::Any); - c->addPar (Command::String,false,"Filename for export"); - modelCommands.append(c); - - c=new Command ("exportOrgMode",Command::Any); - c->addPar (Command::String,false,"Filename for export"); - modelCommands.append(c); - - modelCommands.append(c); - - c=new Command ("exportPDF",Command::Any); - c->addPar (Command::String,false,"Filename for export"); - modelCommands.append(c); - - c=new Command ("exportPDF",Command::Any); - c->addPar (Command::String,false,"Filename for export"); - modelCommands.append(c); - - c=new Command ("exportSVG",Command::Any); - c->addPar (Command::String,false,"Filename for export"); - modelCommands.append(c); - - c=new Command ("exportXML",Command::Any); - c->addPar (Command::String,false,"Path used for export"); - c->addPar (Command::String,false,"Filename for export"); - modelCommands.append(c); - - c=new Command ("getDestPath",Command::Any); - modelCommands.append(c); - - c=new Command ("getFileDir",Command::Any); - modelCommands.append(c); - - c=new Command ("getFrameType",Command::Branch); - modelCommands.append(c); - - c=new Command ("getHeadingPlainText",Command::TreeItem); - modelCommands.append(c); - - c=new Command ("getHeadingXML",Command::TreeItem); - modelCommands.append(c); - - c=new Command ("getMapAuthor",Command::Any); - modelCommands.append(c); - - c=new Command ("getMapComment",Command::Any); - modelCommands.append(c); - - c=new Command ("getMapTitle",Command::Any); - modelCommands.append(c); - - c=new Command ("getNotePlainText",Command::TreeItem); - modelCommands.append(c); - - c=new Command ("getNoteXML",Command::TreeItem); - modelCommands.append(c); - - c=new Command ("getSelectString",Command::TreeItem); - modelCommands.append(c); - - c=new Command ("getTaskSleepDays",Command::Branch); - modelCommands.append(c); - - c=new Command ("getURL",Command::TreeItem); - modelCommands.append(c); - - c=new Command ("getVymLink",Command::Branch); - modelCommands.append(c); - - c=new Command ("getXLinkColor",Command::XLink); - modelCommands.append(c); - - c=new Command ("getXLinkWidth",Command::XLink); - modelCommands.append(c); - - c=new Command ("getXLinkPenStyle",Command::XLink); - modelCommands.append(c); - - c=new Command ("getXLinkStyleBegin",Command::XLink); - modelCommands.append(c); - - c=new Command ("getXLinkStyleEnd",Command::XLink); - modelCommands.append(c); - - c=new Command ("hasActiveFlag",Command::TreeItem); - c->addPar (Command::String,false,"Name of flag"); - modelCommands.append(c); - - c=new Command ("hasNote",Command::Branch); - modelCommands.append(c); - - c=new Command ("hasRichTextNote",Command::Branch); - modelCommands.append(c); - - c=new Command ("hasTask",Command::Branch); - modelCommands.append(c); - - c=new Command ("importDir",Command::Branch); - c->addPar (Command::String,false,"Directory name to import"); - modelCommands.append(c); - - c=new Command ("isScrolled",Command::Branch); - modelCommands.append(c); - - c=new Command ("loadImage",Command::Branch); - c->addPar (Command::String,false,"Filename of image"); - modelCommands.append(c); - - c=new Command ("loadNote",Command::Branch); - c->addPar (Command::String,false,"Filename of note"); - modelCommands.append(c); - - c=new Command ("moveDown",Command::Branch); - modelCommands.append(c); - - c=new Command ("moveUp",Command::Branch); - modelCommands.append(c); - - c=new Command ("moveSlideDown",Command::Any); - modelCommands.append(c); - - c=new Command ("moveSlideUp",Command::Any); - modelCommands.append(c); - - c=new Command ("move",Command::BranchOrImage); - c->addPar (Command::Double,false,"Position x"); - c->addPar (Command::Double,false,"Position y"); - modelCommands.append(c); - - c=new Command ("moveRel",Command::BranchOrImage); - c->addPar (Command::Double,false,"Position x"); - c->addPar (Command::Double,false,"Position y"); - modelCommands.append(c); - - c=new Command ("nop",Command::Any); - modelCommands.append(c); - - c=new Command ("note2URLs",Command::Branch); - modelCommands.append(c); - - //internally required for undo/redo of changing VymText: - c=new Command ("parseVymText",Command::Branch); - c->addPar (Command::String,false,"parse XML of VymText, e.g for Heading or VymNote"); - modelCommands.append(c); - - c=new Command ("paste",Command::Branch); - modelCommands.append(c); - - c=new Command ("redo",Command::Any); - modelCommands.append(c); - - c=new Command ("relinkTo",Command::TreeItem); // FIXME different number of parameters for Image or Branch - c->addPar (Command::String,false,"Selection string of parent"); - c->addPar (Command::Int,false,"Index position"); - c->addPar (Command::Double,true,"Position x"); - c->addPar (Command::Double,true,"Position y"); - modelCommands.append(c); - - c=new Command ("saveImage",Command::Image); - c->addPar (Command::String,false,"Filename of image to save"); - c->addPar (Command::String,false,"Format of image to save"); - modelCommands.append(c); - - c=new Command ("saveNote",Command::Branch); - c->addPar (Command::String,false,"Filename of note to save"); - modelCommands.append(c); - - c=new Command ("scroll",Command::Branch); - modelCommands.append(c); - - c=new Command ("select",Command::Any); - c->addPar (Command::String,false,"Selection string"); - modelCommands.append(c); - - c=new Command ("selectID",Command::Any); - c->addPar (Command::String,false,"Unique ID"); - modelCommands.append(c); - - c=new Command ("selectLastBranch",Command::Branch); - modelCommands.append(c); - - c=new Command ("selectLastImage",Command::Branch); - modelCommands.append(c); - - c=new Command ("selectLatestAdded",Command::Any); - modelCommands.append(c); - - c=new Command ("selectParent",Command::Branch); - modelCommands.append(c); - - c=new Command ("setFlag",Command::TreeItem); - c->addPar (Command::String,false,"Name of flag"); - modelCommands.append(c); - - c=new Command ("setTaskSleep",Command::Branch); - c->addPar (Command::String,false,"Days to sleep"); - modelCommands.append(c); - - c=new Command ("setFrameIncludeChildren",Command::BranchOrImage); - c->addPar (Command::Bool,false,"Include or don't include children in frame"); - modelCommands.append(c); - - c=new Command ("setFrameType",Command::BranchOrImage); - c->addPar (Command::String,false,"Type of frame"); - modelCommands.append(c); - - c=new Command ("setFramePenColor",Command::BranchOrImage); - c->addPar (Command::Color,false,"Color of frame border line"); - modelCommands.append(c); - - c=new Command ("setFrameBrushColor",Command::BranchOrImage); - c->addPar (Command::Color,false,"Color of frame background"); - modelCommands.append(c); - - c=new Command ("setFramePadding",Command::BranchOrImage); - c->addPar (Command::Int,false,"Padding around frame"); - modelCommands.append(c); - - c=new Command ("setFrameBorderWidth",Command::BranchOrImage); - c->addPar (Command::Int,false,"Width of frame borderline"); - modelCommands.append(c); - - c=new Command ("setHeadingPlainText",Command::TreeItem); - c->addPar (Command::String,false,"New heading"); - modelCommands.append(c); - - c=new Command ("setHideExport",Command::BranchOrImage); - c->addPar (Command::Bool,false,"Set if item should be visible in export"); - modelCommands.append(c); - - c=new Command ("setIncludeImagesHorizontally",Command::Branch); - c->addPar (Command::Bool,false,"Set if images should be included horizontally in parent branch"); - modelCommands.append(c); - - c=new Command ("setIncludeImagesVertically",Command::Branch); - c->addPar (Command::Bool,false,"Set if images should be included vertically in parent branch"); - modelCommands.append(c); - - c=new Command ("setHideLinksUnselected",Command::BranchOrImage); - c->addPar (Command::Bool,false,"Set if links of items should be visible for unselected items"); - modelCommands.append(c); - - c=new Command ("setMapAnimCurve",Command::Any); - c->addPar (Command::Int,false,"EasingCurve used in animation in MapEditor"); - modelCommands.append(c); - - c=new Command ("setMapAuthor",Command::Any); - c->addPar (Command::String,false,""); - modelCommands.append(c); - - c=new Command ("setMapAnimDuration",Command::Any); - c->addPar (Command::Int,false,"Duration of animation in MapEditor in milliseconds"); - modelCommands.append(c); - - c=new Command ("setMapBackgroundColor",Command::Any); - c->addPar (Command::Color,false,"Color of map background"); - modelCommands.append(c); - - c=new Command ("setMapComment",Command::Any); - c->addPar (Command::String,false,""); - modelCommands.append(c); - - c=new Command ("setMapTitle",Command::Any); - c->addPar (Command::String,false,""); - modelCommands.append(c); - - c=new Command ("setMapDefLinkColor",Command::Any); - c->addPar (Command::Color,false,"Default color of links"); - modelCommands.append(c); - - c=new Command ("setMapLinkStyle",Command::Any); - c->addPar (Command::String,false,"Link style in map"); - modelCommands.append(c); - - c=new Command ("setMapRotation",Command::Any); - c->addPar (Command::Double,false,"Rotation of map"); - modelCommands.append(c); - - c=new Command ("setMapTitle",Command::Any); - c->addPar (Command::String,false,""); - modelCommands.append(c); - - c=new Command ("setMapZoom",Command::Any); - c->addPar (Command::Double,false,"Zoomfactor of map"); - modelCommands.append(c); - - c=new Command ("setNotePlainText",Command::Branch); - c->addPar (Command::String,false,"Note of branch"); - modelCommands.append(c); - - c=new Command ("setScale",Command::Image); - c->addPar (Command::Double,false,"Scale image x"); - c->addPar (Command::Double,false,"Scale image y"); - modelCommands.append(c); - - c=new Command ("setSelectionColor",Command::Any); - c->addPar (Command::Color,false,"Color of selection box"); - modelCommands.append(c); - - c=new Command ("setURL",Command::TreeItem); - c->addPar (Command::String,false,"URL of TreeItem"); - modelCommands.append(c); - - c=new Command ("setVymLink",Command::Branch); - c->addPar (Command::String,false,"Vymlink of branch"); - modelCommands.append(c); - - c=new Command ("setXLinkColor", Command::XLink); - c->addPar (Command::String,false,"Color of xlink"); - modelCommands.append(c); - - c=new Command ("setXLinkLineStyle", Command::XLink); - c->addPar (Command::String,false,"Style of xlink"); - modelCommands.append(c); - - c=new Command ("setXLinkStyleBegin", Command::XLink); - c->addPar (Command::String,false,"Style of xlink begin"); - modelCommands.append(c); - - c=new Command ("setXLinkStyleEnd", Command::XLink); - c->addPar (Command::String,false,"Style of xlink end"); - modelCommands.append(c); - - c=new Command ("setXLinkWidth", Command::XLink); - c->addPar (Command::Int,false,"Width of xlink"); - modelCommands.append(c); - - c=new Command ("sleep",Command::Any); - c->addPar (Command::Int,false,"Sleep (seconds)"); - modelCommands.append(c); - - c=new Command ("sortChildren",Command::Branch); - c->addPar (Command::Bool,true,"Sort children of branch in revers order if set"); - modelCommands.append(c); - - c=new Command ("toggleFlag",Command::Branch); - c->addPar (Command::String,false,"Name of flag to toggle"); - modelCommands.append(c); - - c=new Command ("toggleFrameIncludeChildren",Command::Branch); - modelCommands.append(c); - - c=new Command ("toggleScroll",Command::Branch); - modelCommands.append(c); - - c=new Command ("toggleTarget",Command::Branch); - modelCommands.append(c); - - c=new Command ("toggleTask",Command::Branch); - modelCommands.append(c); - - c=new Command ("undo",Command::Any); - modelCommands.append(c); - - c=new Command ("unscroll",Command::Branch); - modelCommands.append(c); - - c=new Command ("unscrollChildren",Command::Branch); - modelCommands.append(c); - - c=new Command ("unselectAll",Command::Any); - modelCommands.append(c); - - c=new Command ("unsetFlag",Command::Branch); - c->addPar (Command::String,false,"Name of flag to unset"); - modelCommands.append(c); -} - -void Main::cloneActionMapEditor( QAction *a, QKeySequence ks) -{ - a->setShortcut ( ks ); - a->setShortcutContext ( Qt::WidgetShortcut ); - mapEditorActions.append ( a ); -} - -// File Actions -void Main::setupFileActions() -{ - QString tag = tr ("&Map","Menu for file actions"); - QMenu *fileMenu = menuBar()->addMenu ( tag ); - - QAction *a; - a = new QAction(QPixmap( ":/filenew.png"), tr( "&New map","File menu" ),this); - switchboard.addSwitch ("fileMapNew", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( fileNew() ) ); - cloneActionMapEditor( a, Qt::CTRL + Qt::Key_N); - fileMenu->addAction(a); - actionFileNew=a; - - a = new QAction(QPixmap( ":/filenewcopy.png"), tr( "&Copy to new map","File menu" ),this); - switchboard.addSwitch ("fileMapNewCopy", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( fileNewCopy() ) ); - cloneActionMapEditor( a, Qt::CTRL + Qt::SHIFT + Qt::Key_C); - fileMenu->addAction(a); - actionFileNewCopy=a; - - a = new QAction( QPixmap( ":/fileopen.png"), tr( "&Open..." ,"File menu"),this); - switchboard.addSwitch ("fileMapOpen", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( fileLoad() ) ); - cloneActionMapEditor( a, Qt::CTRL + Qt::Key_L); - fileMenu->addAction(a); - actionFileOpen=a; - - a = new QAction(tr( "&Restore last session","Edit menu" ), this); - a->setShortcut (Qt::ALT + Qt::Key_R ); - switchboard.addSwitch ("fileMapRestore", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( fileRestoreSession() ) ); - fileMenu->addAction(a); - actionListFiles.append(a); - actionCopy=a; - - fileLastMapsMenu = fileMenu->addMenu (tr("Open Recent","File menu")); - fileMenu->addSeparator(); - - a = new QAction( QPixmap( ":/filesave.png"), tr( "&Save...","File menu" ), this); - switchboard.addSwitch ("fileMapSave", shortcutScope, a, tag); - cloneActionMapEditor( a, Qt::CTRL + Qt::Key_S); - fileMenu->addAction(a); - restrictedMapActions.append( a ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileSave() ) ); - actionFileSave=a; - - a = new QAction( QPixmap(":/filesaveas.png"), tr( "Save &As...","File menu" ), this); - fileMenu->addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( fileSaveAs() ) ); - - fileMenu->addSeparator(); - - fileImportMenu = fileMenu->addMenu (tr("Import","File menu")); - - if (settings.value( "/mainwindow/showTestMenu",false).toBool()) - { - a = new QAction( QPixmap(), tr("Firefox Bookmarks","Import filters"),this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileImportFirefoxBookmarks() ) ); - fileImportMenu->addAction(a); - } - - a = new QAction("Freemind...",this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileImportFreemind() ) ); - fileImportMenu->addAction(a); - - a = new QAction("Mind Manager...",this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileImportMM() ) ); - fileImportMenu->addAction(a); - - a = new QAction( tr( "Import Dir%1","Import Filters").arg("..." + tr("(still experimental)") ), this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileImportDir() ) ); - fileImportMenu->addAction(a); - - fileExportMenu = fileMenu->addMenu (tr("Export","File menu")); - - a = new QAction( QPixmap(":/file-document-export.png"),tr("Repeat last export (%1)").arg("-"), this); - switchboard.addSwitch ("fileExportLast", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportLast() ) ); - cloneActionMapEditor( a, Qt::ALT + Qt::Key_E ); - fileExportMenu->addAction(a); - actionFileExportLast=a; - - a = new QAction( tr("Webpage (HTML)...","File export menu"),this ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportHTML() ) ); - fileExportMenu->addAction(a); - - a = new QAction( tr("Text (ASCII)...","File export menu"), this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportASCII() ) ); - fileExportMenu->addAction(a); - - a = new QAction( tr("Text with tasks","File export menu") + " (ASCII)... " + tr("(still experimental)"), this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportASCIITasks() ) ); - fileExportMenu->addAction(a); - - a = new QAction( tr("Text (A&O report)...","Export format"), this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportAO() ) ); - fileExportMenu->addAction(a); - - a = new QAction( tr("Image%1","File export menu").arg("..."), this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportImage() ) ); - fileExportMenu->addAction(a); - - a = new QAction( tr("PDF%1","File export menu").arg("..."), this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportPDF() ) ); - fileExportMenu->addAction(a); - - a = new QAction( tr("SVG%1","File export menu").arg("..."), this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportSVG() ) ); - fileExportMenu->addAction(a); - - a = new QAction( "LibreOffice...", this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportImpress() ) ); - fileExportMenu->addAction(a); - - a = new QAction( "XML..." , this ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportXML() ) ); - fileExportMenu->addAction(a); - - a = new QAction( tr("Spreadsheet") + " (CSV)... " + tr("(still experimental)"), this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportCSV() ) ); - fileExportMenu->addAction(a); - - a = new QAction( "Taskjuggler... " + tr("(still experimental)"), this ); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportTaskjuggler() ) ); - fileExportMenu->addAction(a); - - a = new QAction( "OrgMode... " + tr("(still experimental)"), this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportOrgMode() ) ); - fileExportMenu->addAction(a); - - a = new QAction( "LaTeX... " + tr("(still experimental)"), this); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExportLaTeX() ) ); - fileExportMenu->addAction(a); - - fileMenu->addSeparator(); - - a = new QAction( tr( "Properties"), this); - switchboard.addSwitch ("editMapProperties", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editMapProperties() ) ); - fileMenu->addAction(a); - actionListFiles.append (a); - actionMapProperties = a; - - fileMenu->addSeparator(); - - a = new QAction(QPixmap( ":/fileprint.png"), tr( "&Print")+QString("..."), this); - a->setShortcut ( Qt::CTRL + Qt::Key_P); - switchboard.addSwitch ("fileMapPrint", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( filePrint() ) ); - fileMenu->addAction(a); - unrestrictedMapActions.append (a); - actionFilePrint=a; - - a = new QAction( QPixmap(":/fileclose.png"), tr( "&Close Map","File menu" ), this); - a->setShortcut (Qt::CTRL + Qt::Key_W ); - switchboard.addSwitch ("fileMapClose", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( fileCloseMap() ) ); - fileMenu->addAction(a); - - a = new QAction(QPixmap(":/exit.png"), tr( "E&xit","File menu"), this); - a->setShortcut (Qt::CTRL + Qt::Key_Q ); - switchboard.addSwitch ("fileExit", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( fileExitVYM() ) ); - fileMenu->addAction(a); -} - - -//Edit Actions -void Main::setupEditActions() -{ - QString tag = tr("E&dit","Edit menu") ; - QMenu *editMenu = menuBar()->addMenu( tag ); - - QAction *a; - a = new QAction( QPixmap( ":/undo.png"), tr( "&Undo","Edit menu" ),this); - a->setShortcut (Qt::CTRL + Qt::Key_Z); - a->setShortcutContext (Qt::WidgetShortcut); - a->setEnabled (false); - editMenu->addAction(a); - mapEditorActions.append( a ); - restrictedMapActions.append( a ); - switchboard.addSwitch ("mapUndo", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editUndo() ) ); - actionUndo=a; - - a = new QAction( QPixmap( ":/redo.png"), tr( "&Redo","Edit menu" ), this); - a->setShortcut (Qt::CTRL + Qt::Key_Y); - a->setShortcutContext (Qt::WidgetShortcut); - editMenu->addAction(a); - restrictedMapActions.append( a ); - mapEditorActions.append( a ); - switchboard.addSwitch ("mapRedo", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editRedo() ) ); - actionRedo=a; - - editMenu->addSeparator(); - a = new QAction(QPixmap( ":/editcopy.png"), tr( "&Copy","Edit menu" ), this); - a->setShortcut (Qt::CTRL + Qt::Key_C ); - a->setShortcutContext (Qt::WidgetShortcut); - a->setEnabled (false); - editMenu->addAction(a); - unrestrictedMapActions.append ( a ); - mapEditorActions.append( a ); - switchboard.addSwitch ("mapCopy", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editCopy() ) ); - actionCopy=a; - - a = new QAction(QPixmap( ":/editcut.png" ), tr( "Cu&t","Edit menu" ), this); - a->setShortcut (Qt::CTRL + Qt::Key_X ); - a->setEnabled (false); - a->setShortcutContext (Qt::WidgetShortcut); - editMenu->addAction(a); - restrictedMapActions.append( a ); - mapEditorActions.append( a ); - restrictedMapActions.append( a ); - switchboard.addSwitch ("mapCut", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editCut() ) ); - addAction (a); - actionCut=a; - - a = new QAction(QPixmap( ":/editpaste.png"), tr( "&Paste","Edit menu" ),this); - connect( a, SIGNAL( triggered() ), this, SLOT( editPaste() ) ); - a->setShortcut (Qt::CTRL + Qt::Key_V ); - a->setShortcutContext (Qt::WidgetShortcut); - a->setEnabled (false); - editMenu->addAction(a); - restrictedMapActions.append( a ); - mapEditorActions.append( a ); - switchboard.addSwitch ("mapPaste", shortcutScope, a, tag); - actionPaste=a; - - // Shortcut to delete selection - a = new QAction( tr( "Delete Selection","Edit menu" ),this); - a->setShortcut ( Qt::Key_Delete); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapDelete", shortcutScope, a, tag); - addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( editDeleteSelection() ) ); - editMenu->addAction(a); - actionListItems.append (a); - actionDelete=a; - - // Shortcut to add attribute - a= new QAction(tr( "Add attribute" ), this); - if (settings.value( "/mainwindow/showTestMenu",false).toBool() ) - { - //a->setShortcut ( Qt::Key_Q); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapAddAttribute", shortcutScope, a, tag); - } - connect( a, SIGNAL( triggered() ), this, SLOT( editAddAttribute() ) ); - editMenu->addAction(a); - actionAddAttribute= a; - - - // Shortcut to add mapcenter - a= new QAction(QPixmap(":/newmapcenter.png"),tr( "Add mapcenter","Canvas context menu" ), this); - a->setShortcut ( Qt::Key_C); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapAddCenter", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editAddMapCenter() ) ); - editMenu->addAction(a); - actionListFiles.append (a); - actionAddMapCenter = a; - - - // Shortcut to add branch - a = new QAction(QPixmap(":/newbranch.png"), tr( "Add branch as child","Edit menu" ), this); - switchboard.addSwitch ("mapEditNewBranch", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranch() ) ); - cloneActionMapEditor( a, Qt::Key_A ); - taskEditorActions.append( a ); - actionListBranches.append(a); - actionAddBranch=a; - - - // Add branch by inserting it at selection - a = new QAction(tr( "Add branch (insert)","Edit menu" ),this); - a->setShortcut ( Qt::ALT + Qt::Key_A ); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapEditAddBranchBefore", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchBefore() ) ); - editMenu->addAction(a); - actionListBranches.append(a); - actionAddBranchBefore=a; - - // Add branch above - a = new QAction(tr( "Add branch above","Edit menu" ), this); - a->setShortcut (Qt::SHIFT+Qt::Key_Insert ); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapEditAddBranchAbove", shortcutScope, a, tag); - addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchAbove() ) ); - a->setEnabled (false); - actionListBranches.append(a); - actionAddBranchAbove=a; - - a = new QAction(tr( "Add branch above","Edit menu" ), this); - a->setShortcut (Qt::SHIFT+Qt::Key_A ); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapEditAddBranchAboveAlt", shortcutScope, a, tag); - addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchAbove() ) ); - actionListBranches.append(a); - editMenu->addAction(a); - - // Add branch below - a = new QAction(tr( "Add branch below","Edit menu" ), this); - a->setShortcut (Qt::CTRL +Qt::Key_Insert ); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapEditAddBranchBelow", shortcutScope, a, tag); - addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchBelow() ) ); - a->setEnabled (false); - actionListBranches.append(a); - - a = new QAction(tr( "Add branch below","Edit menu" ), this); - a->setShortcut (Qt::CTRL +Qt::Key_A ); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapEditAddBranchBelowAlt", shortcutScope, a, tag); - addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchBelow() ) ); - actionListBranches.append(a); - actionAddBranchBelow=a; - - a = new QAction(QPixmap(":/up.png" ), tr( "Move branch up","Edit menu" ), this); - a->setShortcut (Qt::Key_PageUp ); - a->setShortcutContext (Qt::WidgetShortcut); - //a->setEnabled (false); - mapEditorActions.append( a ); - taskEditorActions.append( a ); - restrictedMapActions.append( a ); - actionListBranches.append (a); - editMenu->addAction(a); - switchboard.addSwitch ("mapEditMoveBranchUp", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editMoveUp() ) ); - actionMoveUp=a; - - a = new QAction( QPixmap( ":/down.png"), tr( "Move branch down","Edit menu" ),this); - a->setShortcut ( Qt::Key_PageDown ); - a->setShortcutContext (Qt::WidgetShortcut); - //a->setEnabled (false); - mapEditorActions.append( a ); - taskEditorActions.append( a ); - restrictedMapActions.append( a ); - actionListBranches.append (a); - editMenu->addAction(a); - switchboard.addSwitch ("mapEditMoveBranchDown", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editMoveDown() ) ); - actionMoveDown=a; - - a = new QAction(QPixmap(), tr( "&Detach","Context menu" ),this); - a->setStatusTip ( tr( "Detach branch and use as mapcenter","Context menu" ) ); - a->setShortcut ( Qt::Key_D ); - switchboard.addSwitch ("mapDetachBranch", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editDetach() ) ); - editMenu->addAction(a); - actionListBranches.append (a); - actionDetach=a; - - a = new QAction( QPixmap(":/editsort.png" ), tr( "Sort children","Edit menu" ), this ); - a->setEnabled (true); - a->setShortcut ( Qt::Key_O ); - switchboard.addSwitch ("mapSortBranches", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editSortChildren() ) ); - editMenu->addAction(a); - actionListBranches.append (a); - actionSortChildren=a; - - a = new QAction( QPixmap(":/editsortback.png" ), tr( "Sort children backwards","Edit menu" ), this ); - a->setEnabled (true); - a->setShortcut ( Qt::SHIFT + Qt::Key_O ); - switchboard.addSwitch ("mapSortBranchesReverse", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editSortBackChildren() ) ); - editMenu->addAction(a); - actionListBranches.append (a); - actionSortBackChildren=a; - - a = new QAction( QPixmap(":/flag-scrolled-right.png"), tr( "Scroll branch","Edit menu" ), this); - a->setShortcut ( Qt::Key_S ); - switchboard.addSwitch ("mapToggleScroll", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editToggleScroll() ) ); - editMenu->addAction(a); - actionListBranches.append (a); - a->setEnabled (false); - a->setCheckable(true); - addAction (a); - actionListBranches.append(a); - actionToggleScroll=a; - - a = new QAction( tr( "Unscroll children","Edit menu" ), this); - editMenu->addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( editUnscrollChildren() ) ); - actionListBranches.append (a); - - a = new QAction( tr( "Grow selection","Edit menu" ), this); - a->setShortcut ( Qt::CTRL + Qt::Key_Plus); - switchboard.addSwitch ("mapGrowSelection", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editGrowSelectionSize() ) ); - editMenu->addAction(a); - actionListBranches.append (a); - actionListItems.append (a); - actionGrowSelectionSize=a; - - a = new QAction( tr( "Shrink selection","Edit menu" ), this); - a->setShortcut ( Qt::CTRL + Qt::Key_Minus); - switchboard.addSwitch ("mapShrinkSelection", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editShrinkSelectionSize() ) ); - editMenu->addAction(a); - actionListBranches.append (a); - actionListItems.append (a); - actionShrinkSelectionSize=a; - - a = new QAction( tr( "Reset selection size","Edit menu" ), this); - a->setShortcut ( Qt::CTRL + Qt::Key_0); - switchboard.addSwitch ("mapResetSelectionSize", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editResetSelectionSize() ) ); - editMenu->addAction(a); - actionListBranches.append (a); - actionListItems.append (a); - actionResetSelectionSize=a; - - editMenu->addSeparator(); - - a = new QAction( QPixmap(), "TE: " + tr( "Collapse one level","Edit menu" ), this); - a->setShortcut ( Qt::Key_Less + Qt::CTRL); - switchboard.addSwitch ("mapCollapseOneLevel", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editCollapseOneLevel() ) ); - editMenu->addAction(a); - a->setEnabled (false); - a->setCheckable(false); - actionListBranches.append(a); - addAction (a); - actionCollapseOneLevel=a; - - a = new QAction( QPixmap(), "TE: " + tr( "Collapse unselected levels","Edit menu" ), this); - a->setShortcut ( Qt::Key_Less); - switchboard.addSwitch ("mapCollapseUnselectedLevels", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editCollapseUnselected() ) ); - editMenu->addAction(a); - a->setEnabled (false); - a->setCheckable(false); - actionListBranches.append(a); - addAction (a); - actionCollapseUnselected=a; - - a = new QAction( QPixmap(), tr( "Expand all branches","Edit menu" ), this); - connect( a, SIGNAL( triggered() ), this, SLOT( editExpandAll() ) ); - actionExpandAll=a; - actionExpandAll->setEnabled (false); - actionExpandAll->setCheckable(false); - actionListBranches.append(actionExpandAll); - addAction (a); - - a = new QAction( QPixmap(), tr( "Expand one level","Edit menu" ), this); - a->setShortcut ( Qt::Key_Greater ); - switchboard.addSwitch ("mapExpandOneLevel", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editExpandOneLevel() ) ); - a->setEnabled (false); - a->setCheckable(false); - addAction (a); - actionListBranches.append(a); - actionExpandOneLevel=a; - - tag = tr("References Context menu","Shortcuts"); - a = new QAction( QPixmap(":/flag-url.png"), tr( "Open URL","Edit menu" ), this); - a->setShortcut (Qt::SHIFT + Qt::Key_U ); - switchboard.addSwitch ("mapOpenUrl", shortcutScope, a, tag); - addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( editOpenURL() ) ); - actionListBranches.append (a); - actionOpenURL=a; - - a = new QAction( tr( "Open URL in new tab","Edit menu" ), this); - //a->setShortcut (Qt::CTRL+Qt::Key_U ); - switchboard.addSwitch ("mapOpenUrlTab", shortcutScope, a, tag); - addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( editOpenURLTab() ) ); - actionListBranches.append (a); - actionOpenURLTab=a; - - a = new QAction( tr( "Open all URLs in subtree (including scrolled branches)","Edit menu" ), this); - a->setShortcut ( Qt::CTRL + Qt::Key_U ); - switchboard.addSwitch ("mapOpenUrlsSubTree", shortcutScope, a, tag); - addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( editOpenMultipleVisURLTabs() ) ); - actionListBranches.append(a); - actionOpenMultipleVisURLTabs=a; - - a = new QAction( tr( "Open all URLs in subtree","Edit menu" ), this); - switchboard.addSwitch ("mapOpenMultipleUrlTabs", shortcutScope, a, tag); - addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( editOpenMultipleURLTabs() ) ); - actionListBranches.append(a); - actionOpenMultipleURLTabs=a; - - a = new QAction(QPixmap(), tr( "Extract URLs from note","Edit menu"), this); - a->setShortcut ( Qt::SHIFT + Qt::Key_N ); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapUrlsFromNote", shortcutScope, a, tag); - addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( editNote2URLs() ) ); - actionListBranches.append(a); - actionGetURLsFromNote=a; - - a = new QAction(QPixmap(":/flag-urlnew.png"), tr( "Edit URL...","Edit menu"), this); - a->setShortcut ( Qt::Key_U ); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapEditURL", shortcutScope, a, tag); - addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( editURL() ) ); - actionListBranches.append(a); - actionURLNew=a; - - a = new QAction(QPixmap(), tr( "Edit local URL...","Edit menu"), this); - //a->setShortcut (Qt::SHIFT + Qt::Key_U ); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapEditLocalURL", shortcutScope, a, tag); - addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( editLocalURL() ) ); - actionListBranches.append(a); - actionLocalURL=a; - - a = new QAction( tr( "Use heading for URL","Edit menu" ), this); - a->setShortcut ( Qt::ALT + Qt::Key_U ); - a->setShortcutContext (Qt::ApplicationShortcut); - a->setEnabled (false); - switchboard.addSwitch ("mapHeading2URL", shortcutScope, a, tag); - addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( editHeading2URL() ) ); - actionListBranches.append(a); - actionHeading2URL=a; - - tag = tr("Bugzilla handling","Shortcuts"); - a = new QAction(tr( "Create URL to SUSE Bugzilla","Edit menu" ), this); - a->setEnabled (false); - actionListBranches.append(a); - a->setShortcut ( Qt::Key_B ); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapUseHeadingForURL", shortcutScope, a, tag); - addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( editBugzilla2URL() ) ); - actionListBranches.append(a); - actionBugzilla2URL=a; - - a = new QAction(tr( "Get data from SUSE Bugzilla","Edit menu" ), this); - a->setShortcut ( Qt::Key_B + Qt::SHIFT); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapUpdateFromBugzilla", shortcutScope, a, tag); - addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( getBugzillaData() ) ); - actionListBranches.append(a); - actionGetBugzillaData=a; - - a = new QAction(tr( "Get data from SUSE Bugzilla for subtree","Edit menu" ), this); - a->setShortcut ( Qt::Key_B + Qt::CTRL); - a->setShortcutContext (Qt::WindowShortcut); - switchboard.addSwitch ("mapUpdateSubTreeFromBugzilla", shortcutScope, a, tag); - addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( getBugzillaDataSubtree() ) ); - actionListBranches.append(a); - actionGetBugzillaDataSubtree=a; - - tag = tr("SUSE Fate tool handling","Shortcuts"); - a = new QAction(tr( "Create URL to SUSE FATE tool","Edit menu" ), this); - a->setEnabled (false); - switchboard.addSwitch ("mapFate2URL", shortcutScope, a, tag); - actionListBranches.append(a); - connect( a, SIGNAL( triggered() ), this, SLOT( editFATE2URL() ) ); - actionListBranches.append(a); - actionFATE2URL=a; - - tag = tr("vymlinks - linking maps","Shortcuts"); - a = new QAction(QPixmap(":/flag-vymlink.png"), tr( "Open linked map","Edit menu" ), this); - a->setEnabled (false); - switchboard.addSwitch ("mapOpenVymLink", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editOpenVymLink() ) ); - actionListBranches.append (a); - actionOpenVymLink=a; - - a = new QAction(QPixmap(":/flag-vymlink.png"), tr( "Open linked map in background tab","Edit menu" ), this); - a->setEnabled (false); - switchboard.addSwitch ("mapOpenVymLink", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editOpenVymLinkBackground() ) ); - actionListBranches.append (a); - actionOpenVymLinkBackground=a; - - a = new QAction(QPixmap(), tr( "Open all vym links in subtree","Edit menu" ), this); - a->setEnabled (false); - switchboard.addSwitch ("mapOpenMultipleVymLinks", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editOpenMultipleVymLinks() ) ); - actionListBranches.append(a); - actionOpenMultipleVymLinks=a; - - - a = new QAction(QPixmap(":/flag-vymlinknew.png"), tr( "Edit vym link...","Edit menu" ), this); - a->setEnabled (false); - switchboard.addSwitch ("mapEditVymLink", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editVymLink() ) ); - actionListBranches.append(a); - actionEditVymLink=a; - - a = new QAction(tr( "Delete vym link","Edit menu" ),this); - a->setEnabled (false); - switchboard.addSwitch ("mapDeleteVymLink", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editDeleteVymLink() ) ); - actionListBranches.append(a); - actionDeleteVymLink=a; - - tag = tr("Exports","Shortcuts"); - a = new QAction(QPixmap(":/flag-hideexport.png"), tr( "Hide in exports","Edit menu" ), this); - a->setShortcut (Qt::Key_H ); - a->setShortcutContext (Qt::WindowShortcut); - a->setCheckable(true); - a->setEnabled (false); - addAction(a); - switchboard.addSwitch ("mapToggleHideExport", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editToggleHideExport() ) ); - actionListItems.append (a); - actionToggleHideExport=a; - - tag = tr("Tasks","Shortcuts"); - a = new QAction(QPixmap(":/flag-task.png"), tr( "Toggle task","Edit menu" ), this); - a->setShortcut (Qt::Key_W + Qt::SHIFT); - a->setShortcutContext (Qt::WindowShortcut); - a->setCheckable(true); - a->setEnabled (false); - addAction(a); - switchboard.addSwitch ("mapToggleTask", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editToggleTask() ) ); - actionListBranches.append (a); - actionToggleTask=a; - - a = new QAction(QPixmap(), tr( "Cycle task status","Edit menu" ), this); - a->setShortcut (Qt::Key_W ); - a->setShortcutContext (Qt::WindowShortcut); - a->setCheckable(false); - a->setEnabled (false); - addAction(a); - switchboard.addSwitch ("mapCycleTaskStatus", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editCycleTaskStatus() ) ); - actionListBranches.append (a); - actionCycleTaskStatus=a; - - a = new QAction(QPixmap(), tr( "Reset sleep","Task sleep" ), this); - a->setShortcutContext (Qt::WindowShortcut); - a->setCheckable(false); - a->setEnabled (false); - a->setData (0); - addAction(a); - switchboard.addSwitch ("mapResetSleep", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editTaskSleepN() ) ); - actionListBranches.append (a); - actionTaskSleep0=a; - - a = new QAction(QPixmap(), tr( "Sleep %1 days","Task sleep" ).arg("n")+"...", this); - a->setShortcutContext (Qt::WindowShortcut); - a->setShortcut (Qt::Key_Q + Qt::SHIFT); - a->setCheckable(false); - a->setEnabled (false); - a->setData (-1); - addAction(a); - switchboard.addSwitch ("mapTaskSleepN", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editTaskSleepN() ) ); - actionListBranches.append (a); - actionTaskSleepN=a; - - a = new QAction(QPixmap(), tr( "Sleep %1 day","Task sleep" ).arg(1), this); - a->setShortcutContext (Qt::WindowShortcut); - a->setCheckable(false); - a->setEnabled (false); - a->setData (1); - addAction(a); - switchboard.addSwitch ("mapTaskSleep1", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editTaskSleepN() ) ); - actionListBranches.append (a); - actionTaskSleep1=a; - - a = new QAction(QPixmap(), tr( "Sleep %1 days","Task sleep" ).arg(2), this); - a->setShortcutContext (Qt::WindowShortcut); - a->setCheckable(false); - a->setEnabled (false); - a->setData (2); - addAction(a); - switchboard.addSwitch ("mapTaskSleep2", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editTaskSleepN() ) ); - actionListBranches.append (a); - actionTaskSleep2=a; - - a = new QAction(QPixmap(), tr( "Sleep %1 days","Task sleep" ).arg(3), this); - a->setShortcutContext (Qt::WindowShortcut); - a->setCheckable(false); - a->setEnabled (false); - a->setData (3); - addAction(a); - switchboard.addSwitch ("mapTaskSleep3", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editTaskSleepN() ) ); - actionListBranches.append (a); - actionTaskSleep3=a; - - a = new QAction(QPixmap(), tr( "Sleep %1 days","Task sleep" ).arg(5), this); - a->setShortcutContext (Qt::WindowShortcut); - a->setCheckable(false); - a->setEnabled (false); - a->setData (5); - addAction(a); - switchboard.addSwitch ("mapTaskSleep5", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editTaskSleepN() ) ); - actionListBranches.append (a); - actionTaskSleep5=a; - - a = new QAction(QPixmap(), tr( "Sleep %1 days","Task sleep" ).arg(7), this); - a->setShortcutContext (Qt::WindowShortcut); - a->setCheckable(false); - a->setEnabled (false); - a->setData (7); - addAction(a); - switchboard.addSwitch ("mapTaskSleep7", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editTaskSleepN() ) ); - actionListBranches.append (a); - actionTaskSleep7=a; - - a = new QAction(QPixmap(), tr( "Sleep %1 weeks","Task sleep" ).arg(2), this); - a->setShortcutContext (Qt::WindowShortcut); - a->setCheckable(false); - a->setEnabled (false); - a->setData (14); - addAction(a); - switchboard.addSwitch ("mapTaskSleep14", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editTaskSleepN() ) ); - actionListBranches.append (a); - actionTaskSleep14=a; - - a = new QAction(QPixmap(), tr( "Sleep %1 weeks","Task sleep" ).arg(4), this); - a->setShortcutContext (Qt::WindowShortcut); - a->setCheckable(false); - a->setEnabled (false); - a->setData (28); - addAction(a); - switchboard.addSwitch ("mapTaskSleep28", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editTaskSleepN() ) ); - actionListBranches.append (a); - actionTaskSleep28=a; - - // Import at selection (adding to selection) - a = new QAction( tr( "Add map (insert)","Edit menu" ),this); - connect( a, SIGNAL( triggered() ), this, SLOT( editImportAdd() ) ); - a->setEnabled (false); - actionListBranches.append(a); - actionImportAdd=a; - - // Import at selection (replacing selection) - a = new QAction( tr( "Add map (replace)","Edit menu" ), this); - connect( a, SIGNAL( triggered() ), this, SLOT( editImportReplace() ) ); - a->setEnabled (false); - actionListBranches.append(a); - actionImportReplace=a; - - // Save selection - a = new QAction( tr( "Save selection","Edit menu" ), this); - connect( a, SIGNAL( triggered() ), this, SLOT( editSaveBranch() ) ); - a->setEnabled (false); - actionListBranches.append(a); - actionSaveBranch=a; - - tag = tr("Removing parts of a map","Shortcuts"); - - // Only remove branch, not its children - a = new QAction(tr( "Remove only branch and keep its children ","Edit menu" ), this); - a->setShortcut (Qt::ALT + Qt::Key_X ); - connect( a, SIGNAL( triggered() ), this, SLOT( editDeleteKeepChildren() ) ); - a->setEnabled (false); - addAction(a); - switchboard.addSwitch ("mapDeleteKeepChildren", shortcutScope, a, tag); - actionListBranches.append(a); - actionDeleteKeepChildren=a; - - // Only remove children of a branch - a = new QAction( tr( "Remove children","Edit menu" ), this); - a->setShortcut (Qt::SHIFT + Qt::Key_X ); - addAction(a); - switchboard.addSwitch ("mapDeleteChildren", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editDeleteChildren() ) ); - a->setEnabled (false); - addAction (a); - actionListBranches.append(a); - actionDeleteChildren=a; - - tag = tr("Various","Shortcuts"); - a = new QAction(tr( "Add timestamp","Edit menu" ), this); - a->setEnabled (false); - actionListBranches.append(a); - a->setShortcut ( Qt::Key_T ); - a->setShortcutContext (Qt::WindowShortcut); - addAction(a); - switchboard.addSwitch ("mapAddTimestamp", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editAddTimestamp() ) ); - actionListBranches.append (a); - actionAddTimestamp=a; - - a = new QAction(tr( "Map properties...","Edit menu" ),this); - a->setEnabled (true); - connect( a, SIGNAL( triggered() ), this, SLOT( editMapProperties() ) ); - actionListFiles.append (a); - actionMapInfo=a; - - a = new QAction( tr( "Add ...","Edit menu" ), this); - a->setShortcutContext (Qt::WindowShortcut); - a->setShortcut (Qt::Key_I + Qt::SHIFT); - addAction(a); - switchboard.addSwitch ("mapLoadImage", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editLoadImage() ) ); - actionLoadImage=a; - - a = new QAction( tr( "Property window","Dialog to edit properties of selection" )+QString ("..."), this); - a->setShortcut ( Qt::Key_P ); - a->setShortcutContext (Qt::WindowShortcut); - a->setCheckable (true); - addAction(a); - switchboard.addSwitch ("mapTogglePropertEditor", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( windowToggleProperty() ) ); - actionViewTogglePropertyEditor=a; -} - -// Select Actions -void Main::setupSelectActions() -{ - QString tag = tr("Selections","Shortcuts"); - QMenu *selectMenu = menuBar()->addMenu( tr("Select","Select menu") ); - QAction *a; - a = new QAction( QPixmap(":/flag-target.png"), tr( "Toggle target...","Edit menu"), this); - a->setShortcut (Qt::SHIFT + Qt::Key_T ); - a->setCheckable(true); - selectMenu->addAction(a); - switchboard.addSwitch ("mapToggleTarget", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editToggleTarget() ) ); - actionListBranches.append (a); - actionToggleTarget=a; - - a = new QAction( QPixmap(":/flag-target.png"), tr( "Goto target...","Edit menu"), this); - a->setShortcut (Qt::Key_G ); - selectMenu->addAction(a); - switchboard.addSwitch ("mapGotoTarget", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editGoToTarget() ) ); - actionListBranches.append (a); - actionGoToTarget=a; - - a = new QAction( QPixmap(":/flag-target.png"), tr( "Move to target...","Edit menu"), this); - a->setShortcut (Qt::Key_M ); - selectMenu->addAction(a); - switchboard.addSwitch ("mapMoveToTarget", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editMoveToTarget() ) ); - actionListBranches.append (a); - actionMoveToTarget=a; - - a = new QAction( QPixmap(":/selectprevious.png"), tr( "Select previous","Edit menu"), this); - a->setShortcut (Qt::CTRL+ Qt::Key_O ); - a->setShortcutContext (Qt::WidgetShortcut); - selectMenu->addAction(a); - actionListFiles.append (a); - mapEditorActions.append ( a ); - switchboard.addSwitch ("mapSelectPrevious", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editSelectPrevious() ) ); - actionSelectPrevious=a; - - a = new QAction( QPixmap(":/selectnext.png"), tr( "Select next","Edit menu"), this); - a->setShortcut (Qt::CTRL + Qt::Key_I ); - a->setShortcutContext (Qt::WidgetShortcut); - selectMenu->addAction(a); - actionListFiles.append (a); - mapEditorActions.append ( a ); - switchboard.addSwitch ("mapSelectNext", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editSelectNext() ) ); - actionSelectNext=a; - - a = new QAction( tr( "Unselect all","Edit menu"), this); - //a->setShortcut (Qt::CTRL + Qt::Key_I ); - selectMenu->addAction(a); - switchboard.addSwitch ("mapSelectNothing", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editSelectNothing() ) ); - actionListFiles.append (a); - actionSelectNothing=a; - - tag = tr("Search functions","Shortcuts"); - a = new QAction( QPixmap(":/find.png"), tr( "Find...","Edit menu"), this); - a->setShortcut (Qt::CTRL + Qt::Key_F ); - selectMenu->addAction(a); - switchboard.addSwitch ("mapFind", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editOpenFindResultWidget() ) ); - actionListFiles.append(a); - actionFind=a; - - a = new QAction( QPixmap(":/find.png"), tr( "Find...","Edit menu"), this); - a->setShortcut (Qt::Key_Slash ); - selectMenu->addAction(a); - switchboard.addSwitch ("mapFindAlt", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( editOpenFindResultWidget() ) ); - actionListFiles.append(a); - - a = new QAction( tr( "Find duplicate URLs","Edit menu"), this); - a->setShortcut (Qt::SHIFT + Qt::Key_F); - switchboard.addSwitch ("mapFindDuplicates", shortcutScope, a, tag); - if (settings.value( "/mainwindow/showTestMenu",false).toBool() ) - selectMenu->addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( editFindDuplicateURLs() ) ); - -} - -// Format Actions -void Main::setupFormatActions() -{ - QMenu *formatMenu = menuBar()->addMenu (tr ("F&ormat","Format menu")); - - QString tag = tr("Formatting","Shortcuts"); - - QAction *a; - QPixmap pix( 16,16); - pix.fill (Qt::black); - a= new QAction(pix, tr( "Set &Color" )+QString("..."), this); - formatMenu->addAction(a); - switchboard.addSwitch ("mapFormatColor", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( formatSelectColor() ) ); - actionFormatColor=a; - - a= new QAction( QPixmap(":/formatcolorpicker.png"), tr( "Pic&k color","Edit menu" ), this); - a->setShortcut (Qt::CTRL + Qt::Key_K ); - formatMenu->addAction(a); - switchboard.addSwitch ("mapFormatColorPicker", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( formatPickColor() ) ); - a->setEnabled (false); - actionListBranches.append(a); - actionFormatPickColor=a; - - a= new QAction(QPixmap(":/formatcolorbranch.png"), tr( "Color &branch","Edit menu" ), this); - //a->setShortcut (Qt::CTRL + Qt::Key_B + Qt::SHIFT); - formatMenu->addAction(a); - switchboard.addSwitch ("mapFormatColorBranch", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( formatColorBranch() ) ); - a->setEnabled (false); - actionListBranches.append(a); - actionFormatColorBranch=a; - - a= new QAction(QPixmap(":/formatcolorsubtree.png"), tr( "Color sub&tree","Edit menu" ), this); - //a->setShortcut (Qt::CTRL + Qt::Key_B); // Color subtree - formatMenu->addAction(a); - switchboard.addSwitch ("mapFormatColorSubtree", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( formatColorSubtree() ) ); - a->setEnabled (false); - actionListBranches.append(a); - actionFormatColorSubtree=a; - - formatMenu->addSeparator(); - - a= new QAction( tr( "Select default font","Branch attribute" )+"...", this); - a->setCheckable(false); - connect( a, SIGNAL( triggered() ), this, SLOT( formatSelectFont() ) ); - formatMenu->addAction (a); - actionFormatFont=a; - - formatMenu->addSeparator(); - - actionGroupFormatLinkStyles=new QActionGroup ( this); - actionGroupFormatLinkStyles->setExclusive (true); - a= new QAction( tr( "Linkstyle Line" ), actionGroupFormatLinkStyles); - a->setCheckable(true); - restrictedMapActions.append( a ); - formatMenu->addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( formatLinkStyleLine() ) ); - actionFormatLinkStyleLine=a; - - a= new QAction( tr( "Linkstyle Curve" ), actionGroupFormatLinkStyles); - a->setCheckable(true); - restrictedMapActions.append( a ); - formatMenu->addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( formatLinkStyleParabel() ) ); - actionFormatLinkStyleParabel=a; - - a= new QAction( tr( "Linkstyle Thick Line" ), actionGroupFormatLinkStyles ); - a->setCheckable(true); - restrictedMapActions.append( a ); - formatMenu->addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( formatLinkStylePolyLine() ) ); - actionFormatLinkStylePolyLine=a; - - a= new QAction( tr( "Linkstyle Thick Curve" ), actionGroupFormatLinkStyles); - a->setCheckable(true); - a->setChecked (true); - restrictedMapActions.append( a ); - formatMenu->addAction (a); - formatMenu->addSeparator(); - connect( a, SIGNAL( triggered() ), this, SLOT( formatLinkStylePolyParabel() ) ); - actionFormatLinkStylePolyParabel=a; - - a = new QAction( tr( "Hide link if object is not selected","Branch attribute" ), this); - a->setCheckable(true); - connect( a, SIGNAL( triggered() ), this, SLOT( formatHideLinkUnselected() ) ); - actionListBranches.append (a); - actionFormatHideLinkUnselected=a; - - a= new QAction( tr( "&Use color of heading for link","Branch attribute" ), this); - a->setCheckable(true); - connect( a, SIGNAL( triggered() ), this, SLOT( formatToggleLinkColorHint() ) ); - formatMenu->addAction (a); - actionFormatLinkColorHint=a; - - pix.fill (Qt::white); - a= new QAction( pix, tr( "Set &Link Color")+"..." , this ); - formatMenu->addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( formatSelectLinkColor() ) ); - actionFormatLinkColor=a; - - a= new QAction( pix, tr( "Set &Selection Color")+"...", this ); - formatMenu->addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( formatSelectSelectionColor() ) ); - actionFormatSelectionColor=a; - - a= new QAction( pix, tr( "Set &Background Color" )+"...", this ); - formatMenu->addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( formatSelectBackColor() ) ); - actionFormatBackColor=a; - - a= new QAction( pix, tr( "Set &Background image" )+"...", this ); - formatMenu->addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT( formatSelectBackImage() ) ); - actionFormatBackImage=a; -} - -// View Actions -void Main::setupViewActions() -{ - QMenu *viewMenu = menuBar()->addMenu ( tr( "&View" )); - toolbarsMenu=viewMenu->addMenu (tr("Toolbars","Toolbars overview in view menu") ); - QString tag = tr("Views","Shortcuts"); - - viewMenu->addSeparator(); - - QAction *a; - a = new QAction( QPixmap(":/viewmag+.png"), tr( "Zoom in","View action" ), this); - a->setShortcut(Qt::Key_Plus); - viewMenu->addAction (a); - switchboard.addSwitch ("mapZoomIn", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT(viewZoomIn() ) ); - actionListFiles.append (a); - actionZoomIn=a; - - a = new QAction( QPixmap(":/viewmag-.png"), tr( "Zoom out","View action" ), this); - a->setShortcut(Qt::Key_Minus); - viewMenu->addAction (a); - switchboard.addSwitch ("mapZoomOut", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( viewZoomOut() ) ); - actionListFiles.append (a); - actionZoomOut=a; - - a = new QAction( QPixmap(":/rotate-ccw.png"), tr( "Rotate counterclockwise","View action" ), this); - a->setShortcut( Qt::SHIFT + Qt::Key_R); - viewMenu->addAction (a); - switchboard.addSwitch ("mapRotateCounterClockwise", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( viewRotateCounterClockwise() ) ); - actionListFiles.append (a); - actionRotateCounterClockwise=a; - - a = new QAction( QPixmap(":/rotate-cw.png"), tr( "Rotate rclockwise","View action" ), this); - a->setShortcut(Qt::Key_R); - viewMenu->addAction (a); - switchboard.addSwitch ("mapRotateClockwise", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( viewRotateClockwise() ) ); - actionListFiles.append (a); - actionRotateClockwise=a; - - a = new QAction(QPixmap(":/viewmag-reset.png"), tr( "reset Zoom","View action" ), this); - a->setShortcut (Qt::Key_Comma); - switchboard.addSwitch ("mapZoomReset", shortcutScope, a, tag); - viewMenu->addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT(viewZoomReset() ) ); - actionListFiles.append (a); - actionZoomReset=a; - - a = new QAction( QPixmap(":/viewshowsel.png"), tr( "Center on selection","View action" ), this); - a->setShortcut(Qt::Key_Period); - viewMenu->addAction (a); - switchboard.addSwitch ("mapCenterOn", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( viewCenter() ) ); - actionListFiles.append (a); - actionCenterOn=a; - - viewMenu->addSeparator(); - - //a=noteEditorDW->toggleViewAction(); - a = new QAction(QPixmap(":/flag-note.png"), tr( "Note editor","View action" ),this); - a->setShortcut ( Qt::Key_N ); - a->setShortcutContext (Qt::WidgetShortcut); - a->setCheckable(true); - viewMenu->addAction (a); - mapEditorActions.append( a ); - switchboard.addSwitch ("mapToggleNoteEditor", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleNoteEditor() ) ); - actionViewToggleNoteEditor=a; - - //a=headingEditorDW->toggleViewAction(); - a = new QAction(QPixmap(":/headingeditor.png"), tr( "Heading editor","View action" ),this); - a->setCheckable(true); - a->setIcon (QPixmap(":/headingeditor.png")); - a->setShortcut ( Qt::Key_E ); - a->setShortcutContext (Qt::WidgetShortcut); - mapEditorActions.append( a ); - viewMenu->addAction (a); - switchboard.addSwitch ("mapToggleHeadingEditor", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleHeadingEditor() ) ); - actionViewToggleHeadingEditor=a; - - // Original icon is "category" from KDE - a = new QAction(QPixmap(":/treeeditor.png"), tr( "Tree editor","View action" ),this); - a->setShortcut ( Qt::CTRL + Qt::Key_T ); - a->setCheckable(true); - viewMenu->addAction (a); - switchboard.addSwitch ("mapToggleTreeEditor", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleTreeEditor() ) ); - actionViewToggleTreeEditor=a; - - a = new QAction(QPixmap(":/taskeditor.png"), tr( "Task editor","View action" ),this); - a->setCheckable(true); - a->setShortcut ( Qt::Key_Q ); - a->setShortcutContext (Qt::WidgetShortcut); - mapEditorActions.append( a ); - viewMenu->addAction (a); - switchboard.addSwitch ("mapToggleTaskEditor", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleTaskEditor() ) ); - actionViewToggleTaskEditor=a; - - a = new QAction(QPixmap(":/slideeditor.png"), tr( "Slide editor","View action" ),this); - a->setShortcut ( Qt::SHIFT + Qt::Key_S ); - a->setCheckable(true); - viewMenu->addAction (a); - switchboard.addSwitch ("mapToggleSlideEditor", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleSlideEditor() ) ); - actionViewToggleSlideEditor=a; - - a = new QAction(QPixmap(":/scripteditor.png"), tr("Script editor","View action"), this); - a->setShortcut ( Qt::ALT + Qt::Key_S ); - a->setCheckable(true); - viewMenu->addAction (a); - switchboard.addSwitch ("mapToggleScriptEditor", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( windowToggleScriptEditor() ) ); - actionViewToggleScriptEditor=a; - - a = new QAction(QPixmap(":/history.png"), tr( "History Window","View action" ),this ); - a->setShortcut ( Qt::CTRL + Qt::Key_H ); - a->setShortcutContext (Qt::WidgetShortcut); - a->setCheckable(true); - viewMenu->addAction (a); - mapEditorActions.append( a ); - switchboard.addSwitch ("mapToggleHistoryWindow", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleHistory() ) ); - actionViewToggleHistoryWindow=a; - - viewMenu->addAction (actionViewTogglePropertyEditor); - - viewMenu->addSeparator(); - - a = new QAction(tr( "Antialiasing","View action" ),this ); - a->setCheckable(true); - a->setChecked (settings.value("/mainwindow/view/AntiAlias",true).toBool()); - viewMenu->addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleAntiAlias() ) ); - actionViewToggleAntiAlias=a; - - a = new QAction(tr( "Smooth pixmap transformations","View action" ),this ); - a->setStatusTip (a->text()); - a->setCheckable(true); - a->setChecked (settings.value("/mainwindow/view/SmoothPixmapTransformation",true).toBool()); - viewMenu->addAction (a); - connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleSmoothPixmap() ) ); - actionViewToggleSmoothPixmapTransform=a; - - a = new QAction(tr( "Next Map","View action" ), this); - a->setStatusTip (a->text()); - a->setShortcut (Qt::SHIFT+ Qt::Key_Right ); - viewMenu->addAction (a); - switchboard.addSwitch ("mapPrevious", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT(windowNextEditor() ) ); - - a = new QAction (tr( "Previous Map","View action" ), this ); - a->setStatusTip (a->text()); - a->setShortcut (Qt::SHIFT+ Qt::Key_Left ); - viewMenu->addAction (a); - switchboard.addSwitch ("mapNext", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT(windowPreviousEditor() ) ); - - a = new QAction (tr( "Next slide","View action" ), this ); - a->setStatusTip (a->text()); - a->setShortcut (Qt::Key_Space); - viewMenu->addAction (a); - switchboard.addSwitch ("mapNextSlide", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT(nextSlide() ) ); - - a = new QAction (tr( "Previous slide","View action" ), this ); - a->setStatusTip (a->text()); - a->setShortcut (Qt::Key_Backspace); - viewMenu->addAction (a); - switchboard.addSwitch ("mapPreviousSlide", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT(previousSlide() ) ); -} - -// Mode Actions -void Main::setupModeActions() -{ - //QPopupMenu *menu = new QPopupMenu( this ); - //menuBar()->insertItem( tr( "&Mode (using modifiers)" ), menu ); - - QString tag = tr("Modifier modes","Shortcuts"); - QAction *a; - actionGroupModModes=new QActionGroup ( this); - actionGroupModModes->setExclusive (true); - a= new QAction( QPixmap(":/modecolor.png"), tr( "Use modifier to color branches","Mode modifier" ), actionGroupModModes); - a->setShortcut (Qt::Key_J); - addAction(a); - switchboard.addSwitch ("mapModModeColor", shortcutScope, a, tag); - a->setCheckable(true); - a->setChecked(true); - actionListFiles.append (a); - actionModModeColor=a; - - a->setShortcut( Qt::Key_K); - addAction(a); - switchboard.addSwitch ("mapModModeCopy", shortcutScope, a, tag); - a->setCheckable(true); - actionListFiles.append (a); - actionModModeCopy=a; - - a= new QAction(QPixmap(":/modelink.png"), tr( "Use modifier to draw xLinks","Mode modifier" ), actionGroupModModes ); - a->setShortcut (Qt::Key_L); - addAction(a); - switchboard.addSwitch ("mapModModeXLink", shortcutScope, a, tag); - a->setCheckable(true); - actionListFiles.append (a); - actionModModeXLink=a; -} - -// Flag Actions -void Main::setupFlagActions() -{ - // Create System Flags - Flag *flag; - - // Tasks - // Origin: ./share/icons/oxygen/48x48/status/task-reject.png - flag=new Flag(":/flag-task-new.png"); - flag->setGroup("system-tasks"); - setupFlag (flag,NULL,"system-task-new",tr("Note","SystemFlag")); - flag=new Flag(":/flag-task-new-morning.png"); - flag->setGroup("system-tasks"); - setupFlag (flag,NULL,"system-task-new-morning",tr("Note","SystemFlag")); - flag=new Flag(":/flag-task-new-sleeping.png"); - flag->setGroup("system-tasks"); - setupFlag (flag,NULL,"system-task-new-sleeping",tr("Note","SystemFlag")); - // Origin: ./share/icons/oxygen/48x48/status/task-reject.png - flag=new Flag(":/flag-task-wip.png"); - flag->setGroup("system-tasks"); - setupFlag (flag,NULL,"system-task-wip",tr("Note","SystemFlag")); - flag=new Flag(":/flag-task-wip-morning.png"); - flag->setGroup("system-tasks"); - setupFlag (flag,NULL,"system-task-wip-morning",tr("Note","SystemFlag")); - flag=new Flag(":/flag-task-wip-sleeping.png"); - flag->setGroup("system-tasks"); - setupFlag (flag,NULL,"system-task-wip-sleeping",tr("Note","SystemFlag")); - // Origin: ./share/icons/oxygen/48x48/status/task-complete.png - flag=new Flag(":/flag-task-finished.png"); - flag->setGroup("system-tasks"); - setupFlag (flag,NULL,"system-task-finished",tr("Note","SystemFlag")); - - flag=new Flag(":/flag-note.png"); - setupFlag (flag,NULL,"system-note",tr("Note","SystemFlag")); - - flag=new Flag(":/flag-url.png"); - setupFlag (flag,NULL,"system-url",tr("URL to Document ","SystemFlag")); - - flag=new Flag(":/flag-url-bugzilla-novell.png"); - setupFlag (flag,NULL,"system-url-bugzilla-novell",tr("URL to Bugzilla ","SystemFlag")); - - flag=new Flag(":/flag-url-bugzilla-novell-closed.png"); - setupFlag (flag,NULL,"system-url-bugzilla-novell-closed",tr("URL to Bugzilla ","SystemFlag")); - - flag=new Flag(":/flag-target.png"); - setupFlag (flag,NULL,"system-target",tr("Map target","SystemFlag")); - - flag=new Flag(":/flag-vymlink.png"); - setupFlag (flag,NULL,"system-vymLink",tr("Link to another vym map","SystemFlag")); - - flag=new Flag(":/flag-scrolled-right.png"); - setupFlag (flag,NULL,"system-scrolledright",tr("subtree is scrolled","SystemFlag")); - - flag=new Flag(":/flag-tmpUnscrolled-right.png"); - setupFlag (flag,NULL,"system-tmpUnscrolledRight",tr("subtree is temporary scrolled","SystemFlag")); - - flag=new Flag(":/flag-hideexport.png"); - setupFlag (flag,NULL,"system-hideInExport",tr("Hide object in exported maps","SystemFlag")); - - addToolBarBreak(); - - // Create Standard Flags - standardFlagsToolbar=addToolBar (tr ("Standard Flags toolbar","Standard Flag Toolbar")); - standardFlagsToolbar->setObjectName ("standardFlagTB"); - standardFlagsMaster->setToolBar (standardFlagsToolbar); - - // Add entry now, to avoid chicken and egg problem and position toolbar - // after all others: - toolbarsMenu->addAction (standardFlagsToolbar->toggleViewAction() ); - - flag=new Flag(":/flag-stopsign.png"); - setupFlag (flag,standardFlagsToolbar,"stopsign",tr("This won't work!","Standardflag"),Qt::Key_1); - flag->unsetGroup(); - - flag=new Flag(":/flag-hook-green.png"); - flag->setGroup("standard-status"); - setupFlag (flag,standardFlagsToolbar,"hook-green",tr("Status - ok,done","Standardflag"),Qt::Key_2); - - flag=new Flag(":/flag-wip.png"); - flag->setGroup("standard-status"); - setupFlag (flag,standardFlagsToolbar,"wip",tr("Status - work in progress","Standardflag"),Qt::Key_3); - - flag=new Flag(":/flag-cross-red.png"); - flag->setGroup("standard-status"); - setupFlag (flag,standardFlagsToolbar,"cross-red",tr("Status - missing, not started","Standardflag"),Qt::Key_4); - - flag=new Flag(":/flag-exclamationmark.png"); - flag->setGroup("standard-mark"); - setupFlag (flag,standardFlagsToolbar,"exclamationmark",tr("Take care!","Standardflag"),Qt::Key_Exclam); - - flag=new Flag(":/flag-questionmark.png"); - flag->setGroup("standard-mark"); - setupFlag (flag,standardFlagsToolbar,"questionmark",tr("Really?","Standardflag"),Qt::Key_Question); - - flag=new Flag(":/flag-smiley-good.png"); - flag->setGroup("standard-smiley"); - setupFlag (flag,standardFlagsToolbar,"smiley-good",tr("Good","Standardflag"),Qt::Key_ParenRight); - - flag=new Flag(":/flag-smiley-sad.png"); - flag->setGroup("standard-smiley"); - setupFlag (flag,standardFlagsToolbar,"smiley-sad",tr("Bad","Standardflag"),Qt::Key_ParenLeft); - - flag=new Flag(":/flag-smiley-omb.png"); - flag->setGroup("standard-smiley"); - setupFlag (flag,standardFlagsToolbar,"smiley-omb",tr("Oh no!","Standardflag")); - // Original omg.png (in KDE emoticons) - flag->unsetGroup(); - - flag=new Flag(":/flag-clock.png"); - setupFlag (flag,standardFlagsToolbar,"clock",tr("Time critical","Standardflag")); - - flag=new Flag(":/flag-phone.png"); - setupFlag (flag,standardFlagsToolbar,"phone",tr("Call...","Standardflag")); - - flag=new Flag(":/flag-lamp.png"); - setupFlag (flag,standardFlagsToolbar,"lamp",tr("Idea!","Standardflag"),Qt::Key_Asterisk); - - flag=new Flag(":/flag-arrow-up.png"); - flag->setGroup("standard-arrow"); - setupFlag (flag,standardFlagsToolbar,"arrow-up",tr("Important","Standardflag"),Qt::SHIFT + Qt::Key_PageUp); - - flag=new Flag(":/flag-arrow-down.png"); - flag->setGroup("standard-arrow"); - setupFlag (flag,standardFlagsToolbar,"arrow-down",tr("Unimportant","Standardflag"),Qt::SHIFT + Qt::Key_PageDown); - - flag=new Flag(":/flag-2arrow-up.png"); - flag->setGroup("standard-arrow"); - setupFlag (flag,standardFlagsToolbar,"2arrow-up",tr("Very important!","Standardflag"),Qt::SHIFT + +Qt::CTRL + Qt::Key_PageUp); - - flag=new Flag(":/flag-2arrow-down.png"); - flag->setGroup("standard-arrow"); - setupFlag (flag,standardFlagsToolbar,"2arrow-down",tr("Very unimportant!","Standardflag"),Qt::SHIFT + Qt::CTRL + Qt::Key_PageDown); - flag->unsetGroup(); - - flag=new Flag(":/flag-thumb-up.png"); - flag->setGroup("standard-thumb"); - setupFlag (flag,standardFlagsToolbar,"thumb-up",tr("I like this","Standardflag")); - - flag=new Flag(":/flag-thumb-down.png"); - flag->setGroup("standard-thumb"); - setupFlag (flag,standardFlagsToolbar,"thumb-down",tr("I do not like this","Standardflag")); - flag->unsetGroup(); - - flag=new Flag(":/flag-rose.png"); - setupFlag (flag,standardFlagsToolbar,"rose",tr("Rose","Standardflag")); - - flag=new Flag(":/flag-heart.png"); - setupFlag (flag,standardFlagsToolbar,"heart",tr("I just love...","Standardflag")); - - flag=new Flag(":/flag-present.png"); - setupFlag (flag,standardFlagsToolbar,"present",tr("Surprise!","Standardflag")); - - flag=new Flag(":/flag-flash.png"); - setupFlag (flag,standardFlagsToolbar,"flash",tr("Dangerous","Standardflag")); - - // Original: xsldbg_output.png - flag=new Flag(":/flag-info.png"); - setupFlag (flag,standardFlagsToolbar,"info",tr("Info","Standardflag"),Qt::Key_I); - - // Original khelpcenter.png - flag=new Flag(":/flag-lifebelt.png"); - setupFlag (flag,standardFlagsToolbar,"lifebelt",tr("This will help","Standardflag")); - - // Freemind flags - flag=new Flag(":/freemind/warning.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar, "freemind-warning",tr("Important","Freemind-Flag")); - - for (int i=1; i<8; i++) - { - flag=new Flag(QString(":/freemind/priority-%1.png").arg(i)); - flag->setVisible(false); - flag->setGroup ("Freemind-priority"); - setupFlag (flag,standardFlagsToolbar, QString("freemind-priority-%1").arg(i),tr("Priority","Freemind-Flag")); - } - - flag=new Flag(":/freemind/back.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-back",tr("Back","Freemind-Flag")); - - flag=new Flag(":/freemind/forward.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-forward",tr("forward","Freemind-Flag")); - - flag=new Flag(":/freemind/attach.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-attach",tr("Look here","Freemind-Flag")); - - flag=new Flag(":/freemind/clanbomber.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-clanbomber",tr("Dangerous","Freemind-Flag")); - - flag=new Flag(":/freemind/desktopnew.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-desktopnew",tr("Don't flagrget","Freemind-Flag")); - - flag=new Flag(":/freemind/flag.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-flag",tr("Flag","Freemind-Flag")); - - - flag=new Flag(":/freemind/gohome.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-gohome",tr("Home","Freemind-Flag")); - - flag=new Flag(":/freemind/kaddressbook.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-kaddressbook",tr("Telephone","Freemind-Flag")); - - flag=new Flag(":/freemind/knotify.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-knotify",tr("Music","Freemind-Flag")); - - flag=new Flag(":/freemind/korn.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-korn",tr("Mailbox","Freemind-Flag")); - - flag=new Flag(":/freemind/mail.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-mail",tr("Maix","Freemind-Flag")); - - flag=new Flag(":/freemind/password.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-password",tr("Password","Freemind-Flag")); - - flag=new Flag(":/freemind/pencil.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-pencil",tr("To be improved","Freemind-Flag")); - - flag=new Flag(":/freemind/stop.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-stop",tr("Stop","Freemind-Flag")); - - flag=new Flag(":/freemind/wizard.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-wizard",tr("Magic","Freemind-Flag")); - - flag=new Flag(":/freemind/xmag.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-xmag",tr("To be discussed","Freemind-Flag")); - - flag=new Flag(":/freemind/bell.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-bell",tr("Reminder","Freemind-Flag")); - - flag=new Flag(":/freemind/bookmark.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-bookmark",tr("Excellent","Freemind-Flag")); - - flag= new Flag(":/freemind/penguin.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-penguin",tr("Linux","Freemind-Flag")); - - flag=new Flag (":/freemind/licq.png"); - flag->setVisible(false); - setupFlag (flag,standardFlagsToolbar,"freemind-licq",tr("Sweet","Freemind-Flag")); -} - -void Main::setupFlag (Flag *flag, QToolBar *tb, const QString &name, const QString &tooltip, const QKeySequence &keyseq) -{ - flag->setName(name); - flag->setToolTip (tooltip); - QAction *a; - if (tb) - { - a=new QAction (flag->getPixmap(),name,this); - // StandardFlag - flag->setAction (a); - a->setVisible (flag->isVisible()); - a->setCheckable(true); - a->setObjectName(name); - a->setToolTip(tooltip); - if (keyseq != 0) - { - a->setShortcut (keyseq); - a->setShortcutContext (Qt::WidgetShortcut); - - // Allow mapEditors to actually trigger this action - mapEditorActions.append( a ); - taskEditorActions.append( a ); - } - - tb->addAction(a); - connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) ); - standardFlagsMaster->addFlag (flag); - } else - { - // SystemFlag - systemFlagsMaster->addFlag (flag); - } -} - -// Network Actions -void Main::setupNetworkActions() -{ - if (!settings.value( "/mainwindow/showTestMenu",false).toBool() ) return; - - QAction *a; - - a = new QAction( "Start TCPserver for MapEditor",this); - //a->setShortcut ( Qt::ALT + Qt::Key_T ); - connect( a, SIGNAL( triggered() ), this, SLOT( networkStartServer() ) ); - - a = new QAction( "Connect MapEditor to server",this); - //a->setShortcut ( Qt::ALT + Qt::Key_C ); - connect( a, SIGNAL( triggered() ), this, SLOT( networkConnect() ) ); -} - -// Settings Actions -void Main::setupSettingsActions() -{ - QMenu *settingsMenu = menuBar()->addMenu( tr( "Settings" )); - - QAction *a; - - a = new QAction( tr( "Check for release notes and updates","Settings action"), this); - a->setCheckable(true); - a->setChecked ( settings.value ("/downloads/enabled",true).toBool()); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsToggleDownloads() ) ); - settingsMenu->addAction (a); - actionSettingsToggleDownloads = a; - - a = new QAction( tr( "Set author for new maps","Settings action"), this); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsDefaultMapAuthor() ) ); - settingsMenu->addAction (a); - - settingsMenu->addSeparator(); - - a = new QAction( tr( "Set application to open pdf files","Settings action"), this); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsPDF() ) ); - settingsMenu->addAction (a); - - a = new QAction( tr( "Set application to open external links","Settings action"), this); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsURL() ) ); - settingsMenu->addAction (a); - - a = new QAction( tr( "Set application to zip/unzip files","Settings action"), this); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsZipTool() ) ); - settingsMenu->addAction (a); - - a = new QAction( tr( "Set path for macros","Settings action")+"...", this); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsMacroDir() ) ); - settingsMenu->addAction (a); - - a = new QAction( tr( "Set number of undo levels","Settings action")+"...", this); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsUndoLevels() ) ); - settingsMenu->addAction (a); - - settingsMenu->addSeparator(); - - a = new QAction( tr( "Autosave","Settings action"), this); - a->setCheckable(true); - a->setChecked ( settings.value ("/system/autosave/use",true).toBool()); - settingsMenu->addAction (a); - actionSettingsToggleAutosave=a; - - a = new QAction( tr( "Autosave time","Settings action")+"...", this); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsAutosaveTime() ) ); - settingsMenu->addAction (a); - actionSettingsAutosaveTime=a; - - // Disable certain actions during testing - if (testmode) - { - actionSettingsToggleAutosave->setChecked (false); - actionSettingsToggleAutosave->setEnabled (false); - actionSettingsAutosaveTime->setEnabled (false); - } - - a = new QAction( tr( "Write backup file on save","Settings action"), this); - a->setCheckable(true); - a->setChecked ( settings.value ("/system/writeBackupFile",false).toBool()); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsToggleWriteBackupFile() ) ); - settingsMenu->addAction (a); - actionSettingsWriteBackupFile=a; - - settingsMenu->addSeparator(); - - a = new QAction( tr( "Edit branch after adding it","Settings action" ), this ); - a->setCheckable(true); - a->setChecked ( settings.value ("/mapeditor/editmode/autoEditNewBranch",true).toBool()); - settingsMenu->addAction (a); - actionSettingsAutoEditNewBranch=a; - - a= new QAction( tr( "Select branch after adding it","Settings action" ), this ); - a->setCheckable(true); - a->setChecked ( settings.value ("/mapeditor/editmode/autoSelectNewBranch",false).toBool() ); - settingsMenu->addAction (a); - actionSettingsAutoSelectNewBranch=a; - - a= new QAction(tr( "Select existing heading","Settings action" ), this); - a->setCheckable(true); - a->setChecked ( settings.value ("/mapeditor/editmode/autoSelectText",true).toBool() ); - settingsMenu->addAction (a); - actionSettingsAutoSelectText=a; - - a= new QAction( tr( "Exclusive flags","Settings action" ), this); - a->setCheckable(true); - a->setChecked ( settings.value ("/mapeditor/editmode/useFlagGroups",true).toBool() ); - settingsMenu->addAction (a); - actionSettingsUseFlagGroups=a; - - a= new QAction( tr( "Use hide flags","Settings action" ), this); - a->setCheckable(true); - a->setChecked ( settings.value ("/export/useHideExport",true).toBool() ); - settingsMenu->addAction (a); - actionSettingsUseHideExport=a; - - settingsMenu->addSeparator(); - - a = new QAction( tr( "Number of visible parents in task editor","Settings action"), this); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsShowParentsLevelTasks() ) ); - settingsMenu->addAction (a); - actionSettingsShowParentsLevelTasks=a; - - a = new QAction( tr( "Number of visible parents in find results window","Settings action"), this); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsShowParentsLevelFindResults() ) ); - settingsMenu->addAction (a); - actionSettingsShowParentsLevelFindResults=a; - - a = new QAction( tr( "Animation","Settings action"), this); - a->setCheckable(true); - a->setChecked (settings.value("/animation/use",true).toBool() ); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsToggleAnimation() ) ); - settingsMenu->addAction (a); - actionSettingsUseAnimation=a; - - a = new QAction( tr( "Automatic layout","Settings action"), this); - a->setCheckable(true); - a->setChecked ( settings.value ("/mainwindow/autoLayout/use",true).toBool()); - connect( a, SIGNAL( triggered() ), this, SLOT( settingsToggleAutoLayout() ) ); - settingsMenu->addAction (a); - actionSettingsToggleAutoLayout=a; -} - -// Test Actions -void Main::setupTestActions() -{ - QMenu *testMenu = menuBar()->addMenu( tr( "Test" )); - - QString tag = "Testing"; - QAction *a; - a = new QAction( "Test function 1" , this); - a->setShortcut (Qt::ALT + Qt::Key_T); - testMenu->addAction(a); - switchboard.addSwitch ("mapTest1", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( testFunction1() ) ); - - a = new QAction( "Test function 2" , this); - testMenu->addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( testFunction2() ) ); - - a = new QAction( "Toggle hide export mode" , this); - a->setCheckable (true); - a->setChecked (false); - testMenu->addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( toggleHideExport() ) ); - actionToggleHideMode=a; - - a = new QAction( "Toggle winter mode" , this); - a->setShortcut (Qt::ALT + Qt::Key_Asterisk); - testMenu->addAction(a); - switchboard.addSwitch ("mapWinterMode", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( toggleWinter() ) ); - actionToggleWinter=a; -} - -// Help Actions -void Main::setupHelpActions() -{ - QMenu *helpMenu = menuBar()->addMenu ( tr( "&Help","Help menubar entry" )); - - QAction *a; - a = new QAction( tr( "Open VYM Documentation (pdf) ","Help action" ), this ); - helpMenu->addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( helpDoc() ) ); - - a = new QAction( tr( "Open VYM example maps ","Help action" ), this ); - helpMenu->addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( helpDemo() ) ); - helpMenu->addSeparator(); - - a = new QAction( tr( "Download and show release notes","Help action" ), this ); - helpMenu->addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( checkReleaseNotes() ) ); - - a = new QAction( tr( "Check, if updates are available","Help action" ), this ); - helpMenu->addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( checkUpdates() ) ); - helpMenu->addSeparator(); - - a = new QAction( tr( "Show keyboard shortcuts","Help action" ), this ); - helpMenu->addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( helpShortcuts() ) ); - - a = new QAction( tr("Debug info","Option to show debugging info") , this); - helpMenu->addAction(a); - connect( a, SIGNAL( triggered() ), this, SLOT( debugInfo() ) ); - - a = new QAction( tr( "About VYM","Help action" ), this); - connect( a, SIGNAL( triggered() ), this, SLOT( helpAbout() ) ); - helpMenu->addAction (a); - - a = new QAction( tr( "About QT","Help action" ), this); - connect( a, SIGNAL( triggered() ), this, SLOT( helpAboutQT() ) ); - helpMenu->addAction (a); -} - -// Context Menus -void Main::setupContextMenus() -{ - // Context menu for goto/move targets (populated on demand) - targetsContextMenu = new QMenu (this); - - // Context Menu for branch or mapcenter - branchContextMenu =new QMenu (this); - branchContextMenu->addAction (actionViewTogglePropertyEditor); - branchContextMenu->addSeparator(); - - // Submenu "Add" - branchAddContextMenu =branchContextMenu->addMenu (tr("Add")); - branchAddContextMenu->addAction (actionPaste ); - branchAddContextMenu->addAction ( actionAddMapCenter ); - branchAddContextMenu->addAction ( actionAddBranch ); - branchAddContextMenu->addAction ( actionAddBranchBefore ); - branchAddContextMenu->addAction ( actionAddBranchAbove); - branchAddContextMenu->addAction ( actionAddBranchBelow ); - branchAddContextMenu->addSeparator(); - branchAddContextMenu->addAction ( actionImportAdd ); - branchAddContextMenu->addAction ( actionImportReplace ); - - // Submenu "Remove" - branchRemoveContextMenu =branchContextMenu->addMenu (tr ("Remove","Context menu name")); - branchRemoveContextMenu->addAction (actionCut); - branchRemoveContextMenu->addAction ( actionDelete ); - branchRemoveContextMenu->addAction ( actionDeleteKeepChildren ); - branchRemoveContextMenu->addAction ( actionDeleteChildren ); - - - branchContextMenu->addAction(actionSaveBranch); - branchContextMenu->addAction( actionFileNewCopy); - branchContextMenu->addAction(actionDetach); - - branchContextMenu->addSeparator(); - branchContextMenu->addAction ( actionLoadImage); - if (settings.value( "/mainwindow/showTestMenu",false).toBool() ) - branchContextMenu->addAction ( actionAddAttribute); - - - branchContextMenu->addSeparator(); - - // Context menu for tasks - taskContextMenu = branchContextMenu->addMenu (tr("Tasks","Context menu")); - taskContextMenu->addAction (actionToggleTask); - taskContextMenu->addAction (actionCycleTaskStatus); - taskContextMenu->addSeparator(); - taskContextMenu->addAction (actionTaskSleep0); - taskContextMenu->addAction (actionTaskSleepN); - taskContextMenu->addAction (actionTaskSleep1); - taskContextMenu->addAction (actionTaskSleep2); - taskContextMenu->addAction (actionTaskSleep3); - taskContextMenu->addAction (actionTaskSleep5); - taskContextMenu->addAction (actionTaskSleep7); - taskContextMenu->addAction (actionTaskSleep14); - taskContextMenu->addAction (actionTaskSleep28); - - // Submenu for Links (URLs, vymLinks) - branchLinksContextMenu =new QMenu (this); - - branchLinksContextMenu=branchContextMenu->addMenu(tr("References (URLs, vymLinks, ...)","Context menu name")); - branchLinksContextMenu->addAction ( actionOpenURL ); - branchLinksContextMenu->addAction ( actionOpenURLTab ); - branchLinksContextMenu->addAction ( actionOpenMultipleVisURLTabs ); - branchLinksContextMenu->addAction ( actionOpenMultipleURLTabs ); - branchLinksContextMenu->addAction ( actionURLNew ); - branchLinksContextMenu->addAction ( actionLocalURL ); - branchLinksContextMenu->addAction ( actionGetURLsFromNote ); - branchLinksContextMenu->addAction ( actionHeading2URL ); - branchLinksContextMenu->addAction ( actionBugzilla2URL ); - branchLinksContextMenu->addAction ( actionGetBugzillaData ); - branchLinksContextMenu->addAction ( actionGetBugzillaDataSubtree ); - if (settings.value( "/mainwindow/showTestMenu",false).toBool() ) - branchLinksContextMenu->addAction ( actionFATE2URL ); - branchLinksContextMenu->addSeparator(); - branchLinksContextMenu->addAction ( actionOpenVymLink ); - branchLinksContextMenu->addAction ( actionOpenVymLinkBackground ); - branchLinksContextMenu->addAction ( actionOpenMultipleVymLinks ); - branchLinksContextMenu->addAction ( actionEditVymLink ); - branchLinksContextMenu->addAction ( actionDeleteVymLink ); - - - // Context Menu for XLinks in a branch menu - // This will be populated "on demand" in updateActions - QString tag = tr ("XLinks","Menu for file actions"); - branchContextMenu->addSeparator(); - branchXLinksContextMenuEdit =branchContextMenu->addMenu (tr ("Edit XLink","Context menu name")); - connect( - branchXLinksContextMenuEdit, SIGNAL( triggered(QAction *) ), - this, SLOT( editEditXLink(QAction * ) ) ); - QAction *a; - a = new QAction( tr("Follow XLink","Context menu") , this); - a->setShortcut (Qt::Key_F); - addAction(a); - switchboard.addSwitch ("mapFollowXLink", shortcutScope, a, tag); - connect( a, SIGNAL( triggered() ), this, SLOT( popupFollowXLink() ) ); - - branchXLinksContextMenuFollow =branchContextMenu->addMenu (tr ("Follow XLink","Context menu name")); - connect( - branchXLinksContextMenuFollow, SIGNAL( triggered(QAction *) ), - this, SLOT( editFollowXLink(QAction * ) ) ); - - - - // Context menu for floatimage - floatimageContextMenu =new QMenu (this); - a= new QAction (tr ("Save image","Context action"),this); - connect (a, SIGNAL (triggered()), this, SLOT (editSaveImage())); - floatimageContextMenu->addAction (a); - - floatimageContextMenu->addSeparator(); - floatimageContextMenu->addAction(actionCopy); - floatimageContextMenu->addAction(actionCut); - - floatimageContextMenu->addSeparator(); - floatimageContextMenu->addAction ( actionFormatHideLinkUnselected ); - - // Context menu for canvas - canvasContextMenu =new QMenu (this); - - canvasContextMenu->addAction (actionAddMapCenter); - - canvasContextMenu->addSeparator(); - - canvasContextMenu->addAction(actionMapProperties); - canvasContextMenu->addAction(actionFormatFont); - - canvasContextMenu->addSeparator(); - - canvasContextMenu->addActions(actionGroupFormatLinkStyles->actions() ); - - canvasContextMenu->addSeparator(); - - canvasContextMenu->addAction(actionFormatLinkColorHint); - - canvasContextMenu->addSeparator(); - - canvasContextMenu->addAction(actionFormatLinkColor); - canvasContextMenu->addAction(actionFormatSelectionColor); - canvasContextMenu->addAction(actionFormatBackColor); - //if (settings.value( "/mainwindow/showTestMenu",false).toBool() ) - // canvasContextMenu->addAction( actionFormatBackImage ); //FIXME-3 makes vym too slow: postponed for later version - - - // Menu for last opened files - // Create actions - for (int i = 0; i < MaxRecentFiles; ++i) - { - recentFileActions[i] = new QAction(this); - recentFileActions[i]->setVisible(false); - fileLastMapsMenu->addAction(recentFileActions[i]); - connect(recentFileActions[i], SIGNAL(triggered()), - this, SLOT(fileLoadRecent())); - } - setupRecentMapsMenu(); -} - -void Main::setupRecentMapsMenu() -{ - QStringList files = settings.value("/mainwindow/recentFileList").toStringList(); - - int numRecentFiles = qMin(files.size(), (int)MaxRecentFiles); - - for (int i = 0; i < numRecentFiles; ++i) { - QString text = QString("&%1 %2").arg(i + 1).arg(files[i]); - recentFileActions[i]->setText(text); - recentFileActions[i]->setData(files[i]); - recentFileActions[i]->setVisible(true); - } - for (int j = numRecentFiles; j < MaxRecentFiles; ++j) - recentFileActions[j]->setVisible(false); -} - -void Main::setupMacros() -{ - for (int i = 0; i <= 12; i++) - { - macroActions[i] = new QAction(this); - macroActions[i]->setData(i); - addAction (macroActions[i]); - connect(macroActions[i], SIGNAL(triggered()), this, SLOT(callMacro())); - } - macroActions[0]->setShortcut ( Qt::Key_F1 ); - macroActions[1]->setShortcut ( Qt::Key_F2 ); - macroActions[2]->setShortcut ( Qt::Key_F3 ); - macroActions[3]->setShortcut ( Qt::Key_F4 ); - macroActions[4]->setShortcut ( Qt::Key_F5 ); - macroActions[5]->setShortcut ( Qt::Key_F6 ); - macroActions[6]->setShortcut ( Qt::Key_F7 ); - macroActions[7]->setShortcut ( Qt::Key_F8 ); - macroActions[8]->setShortcut ( Qt::Key_F9 ); - macroActions[9]->setShortcut ( Qt::Key_F10 ); - macroActions[10]->setShortcut ( Qt::Key_F11 ); - macroActions[11]->setShortcut ( Qt::Key_F12 ); - - macroActions[12]->setShortcut ( Qt::Key_F1 + Qt::SHIFT); -} - -void Main::setupToolbars() -{ - // File actions - fileToolbar = addToolBar( tr ("File actions toolbar","Toolbar for file actions")); - fileToolbar->setObjectName ("fileTB"); - fileToolbar->addAction(actionFileNew); - fileToolbar->addAction(actionFileOpen); - fileToolbar->addAction(actionFileSave); - fileToolbar->addAction(actionFileExportLast); - fileToolbar->addAction(actionFilePrint); - - // Undo/Redo and clipboard - clipboardToolbar =addToolBar( tr ("Undo and clipboard toolbar","Toolbar for redo/undo and clipboard")); - clipboardToolbar->setObjectName ("clipboard toolbar"); - clipboardToolbar->addAction (actionUndo); - clipboardToolbar->addAction (actionRedo); - clipboardToolbar->addAction (actionCopy); - clipboardToolbar->addAction (actionCut); - clipboardToolbar->addAction (actionPaste); - - // Basic edits - editActionsToolbar = addToolBar( tr ("Edit actions toolbar","Toolbar name") ); - editActionsToolbar->setObjectName ("basic edit actions TB"); - editActionsToolbar->addAction (actionAddMapCenter); - editActionsToolbar->addAction (actionAddBranch); - editActionsToolbar->addAction (actionMoveUp); - editActionsToolbar->addAction (actionMoveDown); - editActionsToolbar->addAction (actionSortChildren); - editActionsToolbar->addAction (actionSortBackChildren); - editActionsToolbar->addAction (actionToggleScroll); - editActionsToolbar->addAction (actionToggleHideExport); - editActionsToolbar->addAction (actionToggleTask); - //editActionsToolbar->addAction (actionExpandAll); - //editActionsToolbar->addAction (actionExpandOneLevel); - //editActionsToolbar->addAction (actionCollapseOneLevel); - //editActionsToolbar->addAction (actionCollapseUnselected); - - // Selections - selectionToolbar = addToolBar( tr ("Selection toolbar","Toolbar name") ); - selectionToolbar->setObjectName ("toolbar for selecting items"); - selectionToolbar->addAction (actionToggleTarget); - selectionToolbar->addAction (actionSelectPrevious); - selectionToolbar->addAction (actionSelectNext); - selectionToolbar->addAction (actionFind); - - // URLs and vymLinks - referencesToolbar=addToolBar( tr ("URLs and vymLinks toolbar","Toolbar for URLs and vymlinks")); - referencesToolbar->setObjectName ("URLs and vymlinks toolbar"); - //referencesToolbar->addAction (actionOpenURL); //FIXME-4 removed 2015-06-22 - referencesToolbar->addAction (actionURLNew); - //referencesToolbar->addAction (actionOpenVymLink)//FIXME-4 removed 2015-06-22; - referencesToolbar->addAction (actionEditVymLink); - - // Format and colors - colorsToolbar = addToolBar( tr("Colors toolbar","Colors toolbar name")); - colorsToolbar->setObjectName ("colorsTB"); - colorsToolbar->addAction(actionFormatColor); - colorsToolbar->addAction(actionFormatPickColor); - colorsToolbar->addAction(actionFormatColorBranch); - colorsToolbar->addAction(actionFormatColorSubtree); - - // Zoom - zoomToolbar = addToolBar( tr("Zoom toolbar","View Toolbar name") ); - zoomToolbar->setObjectName ("viewTB"); - zoomToolbar->addAction(actionZoomIn); - zoomToolbar->addAction(actionZoomOut); - zoomToolbar->addAction(actionZoomReset); - zoomToolbar->addAction(actionCenterOn); - zoomToolbar->addAction(actionRotateCounterClockwise); - zoomToolbar->addAction(actionRotateClockwise); - - // Editors - editorsToolbar = addToolBar( tr("Editors toolbar","Editor Toolbar name") ); - editorsToolbar->setObjectName ("editorsTB"); - editorsToolbar->addAction (actionViewToggleNoteEditor); - editorsToolbar->addAction (actionViewToggleHeadingEditor); - editorsToolbar->addAction (actionViewToggleTreeEditor); - editorsToolbar->addAction (actionViewToggleTaskEditor); - editorsToolbar->addAction (actionViewToggleSlideEditor); - editorsToolbar->addAction (actionViewToggleScriptEditor); - editorsToolbar->addAction (actionViewToggleHistoryWindow); - - - // Modifier modes - modModesToolbar = addToolBar( tr ("Modifier modes toolbar","Modifier Toolbar name") ); - modModesToolbar->setObjectName ("modesTB"); - modModesToolbar->addAction(actionModModeColor); - modModesToolbar->addAction(actionModModeCopy); - modModesToolbar->addAction(actionModModeXLink); - - // Add all toolbars to View menu - toolbarsMenu->addAction (fileToolbar->toggleViewAction() ); - toolbarsMenu->addAction (clipboardToolbar->toggleViewAction() ); - toolbarsMenu->addAction (editActionsToolbar->toggleViewAction() ); - toolbarsMenu->addAction (selectionToolbar->toggleViewAction() ); - toolbarsMenu->addAction (colorsToolbar->toggleViewAction() ); - toolbarsMenu->addAction (zoomToolbar->toggleViewAction() ); - toolbarsMenu->addAction (modModesToolbar->toggleViewAction() ); - toolbarsMenu->addAction (referencesToolbar->toggleViewAction() ); - toolbarsMenu->addAction (editorsToolbar->toggleViewAction() ); - - // Default visibility to not overload new users - fileToolbar->show(); - clipboardToolbar->show(); - editActionsToolbar->show(); - selectionToolbar->hide(); - colorsToolbar->show(); - zoomToolbar->show(); - modModesToolbar->hide(); - referencesToolbar->hide(); - editorsToolbar->hide(); - -} - -VymView* Main::currentView() const -{ - if ( tabWidget->currentWidget() ) - { - int i=tabWidget->currentIndex(); - if (i>=0 && i< vymViews.count() ) return vymViews.at(i); - } - return NULL; -} - -MapEditor* Main::currentMapEditor() const -{ - if ( tabWidget->currentWidget()) - return vymViews.at(tabWidget->currentIndex())->getMapEditor(); - return NULL; -} - -uint Main::currentModelID() const -{ - VymModel *m=currentModel(); - if (m) - return m->getModelID(); - else - return 0; -} - -VymModel* Main::currentModel() const -{ - VymView *vv=currentView(); - if (vv) - return vv->getModel(); - else - return NULL; -} - -VymModel* Main::getModel(uint id) const -{ - if (id <=0) return NULL; - - // Used in BugAgent - for (int i=0; igetModel()->getModelID()==id) - return vymViews.at(i)->getModel(); - return NULL; -} - -void Main::gotoModel (VymModel *m) -{ - for (int i=0; igetModel()==m) - { - tabWidget->setCurrentIndex (i); - return; - } -} - -int Main::modelCount() -{ - return vymViews.count(); -} - -void Main::updateTabName( VymModel *vm) -{ - for( int i = 0; i < vymViews.count(); i++) - { - if (vymViews.at(i)->getModel() == vm ) - { - if ( vm->isReadOnly() ) - tabWidget->setTabText( i, vm->getFileName() + " " + tr("(readonly)") ); - else - tabWidget->setTabText( i, vm->getFileName() ); - break; - } - } -} - -void Main::editorChanged() -{ - VymModel *vm=currentModel(); - if (vm) - { - updateNoteEditor (vm->getSelectedIndex() ); - updateQueries (vm); - - taskEditor->setMapName (vm->getMapName() ); - } - - // Update actions to in menus and toolbars according to editor - updateActions(); -} - -void Main::fileNew() -{ - VymModel *vm=new VymModel; - - ///////////////////////////////////// -// new ModelTest(vm, this); - ///////////////////////////////////// - - VymView *vv=new VymView (vm); - vymViews.append (vv); - - tabWidget->addTab (vv,tr("unnamed","MainWindow: name for new and empty file")); - tabWidget->setCurrentIndex (vymViews.count() ); - vv->initFocus(); - - // Create MapCenter for empty map - vm->addMapCenter(false); - vm->makeDefault(); - - // For the very first map we do not have flagrows yet... - vm->select("mc:"); - - // Switch to new tab - tabWidget->setCurrentIndex (tabWidget->count() -1); -} - -void Main::fileNewCopy() -{ - QString fn="unnamed"; - VymModel *srcModel=currentModel(); - if (srcModel) - { - srcModel->copy(); - fileNew(); - VymModel *dstModel=vymViews.last()->getModel(); - if (dstModel->select("mc:0")) - dstModel->loadMap (clipboardDir+"/"+clipboardFile,ImportReplace); - else - qWarning ()<<"Main::fileNewCopy couldn't select mapcenter"; - } -} - -File::ErrorCode Main::fileLoad(QString fn, const LoadMode &lmode, const FileType &ftype) -{ - File::ErrorCode err=File::Success; - - // fn is usually the archive, mapfile the file after uncompressing - QString mapfile; - - // Make fn absolute (needed for unzip) - fn=QDir (fn).absolutePath(); - - VymModel *vm; - - if (lmode==NewMap) - { - // Check, if map is already loaded - int i=0; - while (i<=tabWidget->count() -1) - { - if (vymViews.at(i)->getModel()->getFilePath() == fn) - { - // Already there, ask for confirmation - QMessageBox mb( vymName, - tr("The map %1\nis already opened." - "Opening the same map in multiple editors may lead \n" - "to confusion when finishing working with vym." - "Do you want to").arg(fn), - QMessageBox::Warning, - QMessageBox::Yes | QMessageBox::Default, - QMessageBox::Cancel | QMessageBox::Escape, - QMessageBox::NoButton); - mb.setButtonText( QMessageBox::Yes, tr("Open anyway") ); - mb.setButtonText( QMessageBox::Cancel, tr("Cancel")); - switch( mb.exec() ) - { - case QMessageBox::Yes: - // end loop and load anyway - i=tabWidget->count(); - break; - case QMessageBox::Cancel: - // do nothing - return File::Aborted; - break; - } - } - i++; - } - } - - - // Try to load map - if ( !fn.isEmpty() ) - { - vm = currentModel(); - // Check first, if mapeditor exists - // If it is not default AND we want a new map, - // create a new mapeditor in a new tab - if ( lmode==NewMap && (!vm || !vm->isDefault() ) ) - { - vm=new VymModel; - VymView *vv=new VymView (vm); - vymViews.append (vv); - - tabWidget->addTab (vv,fn); - vv->initFocus(); - } - - // Check, if file exists (important for creating new files - // from command line - if (!QFile(fn).exists() ) - { - QMessageBox mb( vymName, - tr("This map does not exist:\n %1\nDo you want to create a new one?").arg(fn), - QMessageBox::Question, - QMessageBox::Yes , - QMessageBox::Cancel | QMessageBox::Default, - QMessageBox::NoButton ); - - mb.setButtonText( QMessageBox::Yes, tr("Create")); - mb.setButtonText( QMessageBox::No, tr("Cancel")); - - VymModel *vm = currentMapEditor()->getModel(); - switch( mb.exec() ) - { - case QMessageBox::Yes: - // Create new map - vm->setFilePath(fn); - updateTabName( vm ); - statusBar()->showMessage( "Created " + fn , statusbarTime ); - return File::Success; - - case QMessageBox::Cancel: - // don't create new map - statusBar()->showMessage( "Loading " + fn + " failed!", statusbarTime ); - int cur=tabWidget->currentIndex(); - tabWidget->setCurrentIndex (tabWidget->count()-1); - fileCloseMap(); - tabWidget->setCurrentIndex (cur); - return File::Aborted; - } - } - - if (err!=File::Aborted) - { - // Save existing filename in case we import - QString fn_org = vm->getFilePath(); - - // Finally load map into mapEditor - progressDialog.setLabelText (tr("Loading: %1","Progress dialog while loading maps").arg(fn)); - vm->setFilePath (fn); - vm->saveStateBeforeLoad (lmode,fn); - err = vm->loadMap(fn,lmode,ftype); - - // Restore old (maybe empty) filepath, if this is an import - if (lmode != NewMap) - vm->setFilePath (fn_org); - } - - // Finally check for errors and go home - if (err == File::Aborted) - { - if (lmode == NewMap) fileCloseMap(); - statusBar()->showMessage( "Could not load " + fn, statusbarTime ); - } else - { - if (lmode == NewMap) - { - vm->setFilePath (fn); - updateTabName( vm ); - actionFilePrint->setEnabled (true); - } - editorChanged(); - vm->emitShowSelection(); - addRecentMap( fn ); - statusBar()->showMessage( "Loaded " + fn, statusbarTime ); - } - } - return err; -} - - -void Main::fileLoad(const LoadMode &lmode) -{ - QString caption; - switch (lmode) - { - case NewMap: - caption=vymName+ " - " +tr("Load vym map"); - break; - case ImportAdd: - caption=vymName+ " - " +tr("Import: Add vym map to selection"); - break; - case ImportReplace: - caption=vymName+ " - " +tr("Import: Replace selection with vym map"); - break; - } - - QString filter; - filter+="VYM map " + tr("or","File Dialog") +" Freemind map" + " (*.xml *.vym *.vyp *.mm);;"; - filter+="VYM map (*.vym *.vyp);;"; - filter+="VYM Backups (*.vym~);;"; - filter+="Freemind map (*.mm);;"; - filter+="XML (*.xml);;"; - filter+="All (* *.*)"; - QStringList fns=QFileDialog::getOpenFileNames( - this, - caption, - lastMapDir.path(), - filter); - - if (!fns.isEmpty() ) - { - initProgressCounter (fns.count() ); - lastMapDir.setPath(fns.first().left(fns.first().lastIndexOf ("/")) ); - foreach (QString fn, fns) - fileLoad(fn, lmode, getMapType (fn) ); - } - removeProgressCounter(); - - fileSaveSession(); -} - -void Main::fileLoad() -{ - fileLoad (NewMap); - tabWidget->setCurrentIndex (tabWidget->count()-1); -} - -void Main::fileSaveSession() -{ - QStringList flist; - for (int i=0;igetModel()->getFilePath() ); - settings.setValue("/mainwindow/sessionFileList", flist); -} - -void Main::fileRestoreSession() -{ - QStringList flist= settings.value("/mainwindow/sessionFileList").toStringList(); - QStringList::Iterator it=flist.begin(); - - initProgressCounter (flist.count()); - while (it !=flist.end() ) - { - FileType type=getMapType (*it); - fileLoad (*it, NewMap,type); - *it++; - } - removeProgressCounter(); -} - -void Main::fileLoadRecent() -{ - QAction *action = qobject_cast(sender()); - if (action) - { - initProgressCounter (); - QString fn=action->data().toString(); - FileType type=getMapType (fn); - fileLoad (fn, NewMap,type); - removeProgressCounter(); - tabWidget->setCurrentIndex (tabWidget->count()-1); - } -} - -void Main::addRecentMap (const QString &fileName) -{ - - QStringList files = settings.value("/mainwindow/recentFileList").toStringList(); - files.removeAll(fileName); - files.prepend(fileName); - while (files.size() > MaxRecentFiles) - files.removeLast(); - - settings.setValue("/mainwindow/recentFileList", files); - - setupRecentMapsMenu(); -} - -void Main::fileSave(VymModel *m, const SaveMode &savemode) -{ - if (!m) return; - - if (m->isReadOnly() ) return; - - if ( m->getFilePath().isEmpty() ) - { - // We have no filepath yet, - // call fileSaveAs() now, this will call fileSave() - // again. - // First switch to editor - fileSaveAs(savemode); - return; // avoid saving twice... - } - - if (m->save (savemode)==File::Success) - { - statusBar()->showMessage( - tr("Saved %1").arg(m->getFilePath()), - statusbarTime ); - } else - statusBar()->showMessage( - tr("Couldn't save ").arg(m->getFilePath()), - statusbarTime ); -} - -void Main::fileSave() -{ - fileSave (currentModel(), CompleteMap); -} - -void Main::fileSave(VymModel *m) -{ - fileSave (m,CompleteMap); -} - -void Main::fileSaveAs(const SaveMode& savemode) -{ - if (currentMapEditor()) - { - QString filter; - if (savemode == CompleteMap) - filter = "VYM map (*.vym)"; - else - filter = "VYM part of map (*vyp)"; - filter += ";;All (* *.*)"; - - QString fn = QFileDialog::getSaveFileName ( - this, - tr("Save map as"), - lastMapDir.path(), - filter, - NULL, - QFileDialog::DontConfirmOverwrite); - if (!fn.isEmpty() ) - { - // Check for existing file - if (QFile (fn).exists()) - { - QMessageBox mb( vymName, - tr("The file %1\nexists already. Do you want to").arg(fn), - QMessageBox::Warning, - QMessageBox::Yes | QMessageBox::Default, - QMessageBox::Cancel | QMessageBox::Escape, - QMessageBox::NoButton); - mb.setButtonText( QMessageBox::Yes, tr("Overwrite") ); - mb.setButtonText( QMessageBox::Cancel, tr("Cancel")); - switch( mb.exec() ) - { - case QMessageBox::Yes: - // save - break; - case QMessageBox::Cancel: - // do nothing - return; - break; - } - lastMapDir.setPath(fn.left(fn.lastIndexOf ("/")) ); - } else - { - // New file, add extension to filename, if missing - // This is always .vym or .vyp, depending on savemode - if (savemode == CompleteMap) - { - if (!fn.contains (".vym") && !fn.contains (".xml")) - fn += ".vym"; - } else - { - if (!fn.contains (".vyp") && !fn.contains (".xml")) - fn += ".vyp"; - } - } - - // Save now - VymModel *m = currentModel(); - QString fn_org = m->getFilePath(); // Restore fn later, if savemode != CompleteMap - if (savemode == CompleteMap ) - { - // Check for existing lockfile - QFile lockFile( fn + ".lock" ); - if (lockFile.exists() ) - { - QMessageBox::critical( 0, tr( "Critical Error" ), tr("Couldn't save %1,\nbecause of existing lockfile:\n\n%2").arg(fn).arg( lockFile.fileName() )); - return; - } - - if ( !m->renameMap( fn ) ) - { - QMessageBox::critical( 0, tr( "Critical Error" ), tr("Couldn't save %1").arg( fn )); - return; - } - } - fileSave(m, savemode); - - // Set name of tab - if (savemode == CompleteMap) - updateTabName( m ); - else - { // Renaming map to original name, because we only saved the selected part of it - m->setFilePath (fn_org); - } - return; - - } - } -} - -void Main::fileSaveAs() -{ - fileSaveAs (CompleteMap); -} - -void Main::fileImportFirefoxBookmarks() -{ - QFileDialog fd; - fd.setDirectory (vymBaseDir.homePath()+"/.mozilla/firefox"); - fd.setFileMode (QFileDialog::ExistingFiles); - QStringList filters; - filters<<"Firefox "+tr("Bookmarks")+" (*.html)"; - fd.setNameFilters(filters); - fd.setAcceptMode (QFileDialog::AcceptOpen); - fd.setWindowTitle(tr("Import")+" "+"Firefox "+tr("Bookmarks")); - - if ( fd.exec() == QDialog::Accepted ) - { - ImportFirefoxBookmarks im; - QStringList flist = fd.selectedFiles(); - QStringList::Iterator it = flist.begin(); - while( it != flist.end() ) - { - im.setFile (*it); - if (im.transform() && - File::Aborted!=fileLoad (im.getTransformedFile(),NewMap,FreemindMap) && - currentMapEditor() ) - currentMapEditor()->getModel()->setFilePath (""); - ++it; - } - } -} - -void Main::fileImportFreemind() -{ - QStringList filters; - filters <<"Freemind map (*.mm)"<<"All files (*)"; - QFileDialog fd; - fd.setDirectory (lastMapDir); - fd.setFileMode (QFileDialog::ExistingFiles); - fd.setNameFilters (filters); - fd.setWindowTitle(vymName+ " - " +tr("Load Freemind map")); - fd.setAcceptMode (QFileDialog::AcceptOpen); - - QString fn; - if ( fd.exec() == QDialog::Accepted ) - { - lastMapDir=fd.directory().path(); - QStringList flist = fd.selectedFiles(); - QStringList::Iterator it = flist.begin(); - while( it != flist.end() ) - { - fn = *it; - if ( fileLoad (fn,NewMap, FreemindMap) ) - { - currentMapEditor()->getModel()->setFilePath (""); - } - ++it; - } - } -} - - -void Main::fileImportMM() -{ - ImportMM im; - - QFileDialog fd; - fd.setDirectory (lastMapDir); - fd.setFileMode (QFileDialog::ExistingFiles); - QStringList filters; - filters<<"Mind Manager (*.mmap)"; - fd.setNameFilters (filters); - fd.setAcceptMode (QFileDialog::AcceptOpen); - fd.setWindowTitle(tr("Import")+" "+"Mind Manager"); - - if ( fd.exec() == QDialog::Accepted ) - { - lastMapDir=fd.directory(); - QStringList flist = fd.selectedFiles(); - QStringList::Iterator it = flist.begin(); - while( it != flist.end() ) - { - im.setFile (*it); - if (im.transform() && - File::Success==fileLoad (im.getTransformedFile(),NewMap,VymMap) && - currentMapEditor() ) - currentMapEditor()->getModel()->setFilePath (""); - ++it; - } - } -} - -void Main::fileImportDir() -{ - VymModel *m=currentModel(); - if (m) m->importDir(); -} - -void Main::fileExportXML() -{ - VymModel *m=currentModel(); - if (m) m->exportXML(); -} - -void Main::fileExportHTML() -{ - VymModel *m=currentModel(); - if (m) m->exportHTML(); -} - -void Main::fileExportImage() -{ - VymModel *m=currentModel(); - if (m) m->exportImage(); -} - -void Main::fileExportPDF() -{ - VymModel *m=currentModel(); - if (m) m->exportPDF(); -} - -void Main::fileExportSVG() -{ - VymModel *m=currentModel(); - if (m) m->exportSVG(); -} - -void Main::fileExportAO() -{ - VymModel *m=currentModel(); - if (m) m->exportAO(); -} - -void Main::fileExportASCII() -{ - VymModel *m=currentModel(); - if (m) m->exportASCII(); -} - -void Main::fileExportASCIITasks() -{ - VymModel *m=currentModel(); - if (m) m->exportASCII(true); -} - -void Main::fileExportCSV() //FIXME-3 not scriptable yet -{ - VymModel *m=currentModel(); - if (m) - { - ExportCSV ex; - ex.setModel (m); - ex.addFilter ("CSV (*.csv)"); - ex.setDirPath(lastImageDir.absolutePath()); - ex.setWindowTitle(vymName+ " -" + tr("Export as CSV") + " " + tr("(still experimental)")); - if (ex.execDialog() ) - { - m->setExportMode(true); - ex.doExport(); - m->setExportMode(false); - } - } -} - -void Main::fileExportLaTeX() -{ - VymModel *m=currentModel(); - if (m) m->exportLaTeX(); -} - -void Main::fileExportOrgMode() -{ - VymModel *m=currentModel(); - if (m) m->exportOrgMode(); -} - -void Main::fileExportTaskjuggler() //FIXME-3 not scriptable yet -{ - ExportTaskjuggler ex; - VymModel *m=currentModel(); - if (m) - { - ex.setModel (m); - ex.setWindowTitle ( vymName + " - " + tr("Export to") + " Taskjuggler" + tr("(still experimental)")); - ex.setDirPath (lastImageDir.absolutePath()); - ex.addFilter ("Taskjuggler (*.tjp)"); - - if (ex.execDialog() ) - { - m->setExportMode(true); - ex.doExport(); - m->setExportMode(false); - } - } -} - -void Main::fileExportImpress() -{ - ExportOOFileDialog fd; - // TODO add preview in dialog - fd.setWindowTitle(vymName+" - "+tr("Export to")+" LibreOffice"); - fd.setDirectory (QDir().current()); - fd.setAcceptMode (QFileDialog::AcceptSave); - fd.setFileMode (QFileDialog::AnyFile); - if (fd.foundConfig()) - { - if ( fd.exec() == QDialog::Accepted ) - { - if (!fd.selectedFiles().isEmpty()) - { - QString fn=fd.selectedFiles().first(); - if (!fn.contains (".odp")) fn +=".odp"; - - //lastImageDir=fn.left(fn.findRev ("/")); - VymModel *m=currentModel(); - if (m) m->exportImpress (fn,fd.selectedConfig()); - } - } - } else - { - QMessageBox::warning(0, - tr("Warning"), - tr("Couldn't find configuration for export to LibreOffice\n")); - } -} - -void Main::fileExportLast() -{ - VymModel *m=currentModel(); - if (m) m->exportLast(); -} - -bool Main::fileCloseMap(int i) -{ - VymModel *m; - VymView *vv; - if ( i<0) i = tabWidget->currentIndex(); - - vv = vymViews.at(i); - m = vv->getModel(); - - if (m) - { - if (m->hasChanged()) - { - QMessageBox mb( vymName, - tr("The map %1 has been modified but not saved yet. Do you want to").arg(m->getFileName()), - QMessageBox::Warning, - QMessageBox::Yes | QMessageBox::Default, - QMessageBox::No, - QMessageBox::Cancel | QMessageBox::Escape ); - mb.setButtonText( QMessageBox::Yes, tr("Save modified map before closing it") ); - mb.setButtonText( QMessageBox::No, tr("Discard changes")); - mb.setModal (true); - mb.show(); - switch( mb.exec() ) - { - case QMessageBox::Yes: - // save and close - fileSave(m, CompleteMap); - break; - case QMessageBox::No: - // close without saving - break; - case QMessageBox::Cancel: - // do nothing - return true; - } - } - - vymViews.removeAt (i); - tabWidget->removeTab (i); - - // Destroy stuff, order is important - delete (m->getMapEditor()); - delete(vv); - delete (m); - - updateActions(); - return false; - } - return true; // Better don't exit vym if there is no currentModel()... -} - -void Main::filePrint() -{ - if (currentMapEditor()) - currentMapEditor()->print(); -} - -bool Main::fileExitVYM() -{ - fileSaveSession(); - - // Check if one or more editors have changed - while (vymViews.count()>0) - { - tabWidget->setCurrentIndex(0); - if (fileCloseMap()) return true; - } - qApp->quit(); - return false; -} - -void Main::editUndo() -{ - VymModel *m=currentModel(); - if (m) m->undo(); -} - -void Main::editRedo() -{ - VymModel *m=currentModel(); - if (m) m->redo(); -} - -void Main::gotoHistoryStep (int i) -{ - VymModel *m=currentModel(); - if (m) m->gotoHistoryStep(i); -} - -void Main::editCopy() -{ - VymModel *m=currentModel(); - if (m) m->copy(); -} - -void Main::editPaste() -{ - VymModel *m=currentModel(); - if (m) m->paste(); -} - -void Main::editCut() -{ - VymModel *m=currentModel(); - if (m) m->cut(); -} - -bool Main::openURL(const QString &url) -{ - if (url.isEmpty()) return false; - - QString browser=settings.value("/system/readerURL" ).toString(); - QStringList args; - args<")+tr("Set application to open an URL")); - settingsURL() ; - return false; - } - return true; -} - -void Main::openTabs(QStringList urls) -{ - if (urls.isEmpty()) return; - - QStringList args; - QString browser=settings.value("/system/readerURL" ).toString(); -#if defined(VYM_DBUS) - if ( browser.contains("konqueror") && - (browserPID==0 || !QDBusConnection::sessionBus().interface()->registeredServiceNames().value().contains (QString("org.kde.konqueror-%1").arg(*browserPID))) - ) - { - // Start a new browser, if there is not one running already or - // if a previously started konqueror is gone. - if (debug) qDebug() <<"Main::openTabs no konqueror with PID "<<*browserPID<<" found"; - openURL(urls.takeFirst()); - if (debug) qDebug() << "Main::openTabs Started konqueror, new PID is "<<*browserPID; - } - - if (browser.contains("konqueror")) - { - foreach (QString u, urls) - { - // Open new browser - // Try to open new tab in existing konqueror started previously by vym - args.clear(); - - args<< QString("org.kde.konqueror-%1").arg(*browserPID)<< - "/konqueror/MainWindow_1"<< - "newTab" << - u << - "false"; - if (!QProcess::startDetached ("qdbus",args)) - { - QMessageBox::warning(0, - tr("Warning"), - tr("Couldn't start %1 to open a new tab in %2.").arg("qdbus").arg("konqueror")); - return; - } - } - return; - } -#endif - // - // Other browser, e.g. xdg-open - // Just open all urls and leave it to the system to cope with it - foreach (QString u, urls) - { - openURL(u); - - // Now give the browser some time before opening the next tab -#if defined(Q_OS_WIN32) - // There's no sleep in VCEE, replace it with Qt's QThread::wait(). - this->thread()->wait(1000); -#else - sleep (1); -#endif - } -} - - -void Main::editOpenURL() -{ - // Open new browser - VymModel *m=currentModel(); - if (m) - { - QString url=m->getURL(); - if (url=="") return; - openURL(url); - } -} -void Main::editOpenURLTab() -{ - VymModel *m=currentModel(); - if (m) - { - QStringList urls; - urls.append(m->getURL()); - openTabs (urls); - } -} - -void Main::editOpenMultipleVisURLTabs(bool ignoreScrolled) -{ - VymModel *m=currentModel(); - if (m) - { - QStringList urls; - urls=m->getURLs(ignoreScrolled); - openTabs (urls); - } -} - -void Main::editOpenMultipleURLTabs() -{ - editOpenMultipleVisURLTabs (false); -} - -void Main::editNote2URLs() -{ - VymModel *m=currentModel(); - if (m) m->note2URLs(); -} - -void Main::editURL() -{ - VymModel *m=currentModel(); - if (m) - { - QInputDialog *dia=new QInputDialog (this); - dia->setLabelText (tr("Enter URL:")); - dia->setWindowTitle (vymName); - dia->setInputMode (QInputDialog::TextInput); - TreeItem *selti=m->getSelectedItem(); - if (selti) dia->setTextValue (selti->getURL()); - dia->resize(width()*0.6,80); - centerDialog(dia); - - if ( dia->exec() ) m->setURL (dia->textValue() ); - delete dia; - } -} - -void Main::editLocalURL() -{ - VymModel *m=currentModel(); - if (m) - { - TreeItem *selti=m->getSelectedItem(); - if (selti) - { - QString filter; - filter+="All files (*);;"; - filter+=tr("HTML","Filedialog") + " (*.html,*.htm);;"; - filter+=tr("Text","Filedialog") + " (*.txt);;"; - filter+=tr("Spreadsheet","Filedialog") + " (*.odp,*.sxc);;"; - filter+=tr("Textdocument","Filedialog") +" (*.odw,*.sxw);;"; - filter+=tr("Images","Filedialog") + " (*.png *.bmp *.xbm *.jpg *.png *.xpm *.gif *.pnm)"; - - QString fn=QFileDialog::getOpenFileName( - this, - vymName+" - " +tr("Set URL to a local file"), - lastMapDir.path(), - filter); - - if (!fn.isEmpty() ) - { - lastMapDir.setPath(fn.left(fn.lastIndexOf ("/")) ); - if (!fn.startsWith("file://") ) - fn="file://" + fn; - m->setURL (fn); - } - } - } -} - -void Main::editHeading2URL() -{ - VymModel *m=currentModel(); - if (m) m->editHeading2URL(); -} - -void Main::editBugzilla2URL() -{ - VymModel *m=currentModel(); - if (m) m->editBugzilla2URL(); -} - -void Main::getBugzillaData() -{ - VymModel *m=currentModel(); - /* - QProgressDialog progress ("Doing stuff","cancl",0,10,this); - progress.setWindowModality(Qt::WindowModal); - //progress.setCancelButton (NULL); - progress.show(); - progress.setMinimumDuration (0); - progress.setValue (1); - progress.setValue (5); - progress.update(); - */ - /* - QProgressBar *pb=new QProgressBar; - pb->setMinimum (0); - pb->setMaximum (0); - pb->show(); - pb->repaint(); - */ - if (m) m->getBugzillaData(false); -} - -void Main::getBugzillaDataSubtree() -{ - VymModel *m=currentModel(); - if (m) m->getBugzillaData(true); -} - -void Main::editFATE2URL() -{ - VymModel *m=currentModel(); - if (m) m->editFATE2URL(); -} - -void Main::editHeading() -{ - MapEditor *me=currentMapEditor(); - if (me) me->editHeading(); -} - -void Main::editHeadingFinished(VymModel *m) -{ - if (m) - { - if (!actionSettingsAutoSelectNewBranch->isChecked() && - !prevSelection.isEmpty()) - m->select(prevSelection); - prevSelection = ""; - } -} - -void Main::openVymLinks(const QStringList &vl, bool background) -{ - QStringList vlmin; - int index = -1; - for (int j = 0; j < vl.size(); ++j) - { - // compare path with already loaded maps - QString absPath = QFileInfo(vl.at(j)).absoluteFilePath(); - index = -1; - for (int i = 0;i <= vymViews.count() -1; i++) - { - if ( absPath == vymViews.at(i)->getModel()->getFilePath() ) - { - index = i; - break; - } - } - if (index < 0) vlmin.append ( absPath ); - } - - - progressCounterTotal = vlmin.size(); - for (int j = 0; j < vlmin.size(); j++) - { - // Load map - if (!QFile(vlmin.at(j)).exists() ) - QMessageBox::critical( 0, tr( "Critical Error" ), - tr("Couldn't open map %1").arg(vlmin.at(j))); - else - { - fileLoad (vlmin.at(j), NewMap,VymMap); - if (!background) - tabWidget->setCurrentIndex (tabWidget->count()-1); - } - } - // Go to tab containing the map - if (index >= 0) - tabWidget->setCurrentIndex (index); - removeProgressCounter(); -} - -void Main::editOpenVymLink(bool background) -{ - VymModel *m = currentModel(); - if (m) - { - QStringList vl; - vl.append(m->getVymLink()); - openVymLinks (vl, background); - } -} - -void Main::editOpenVymLinkBackground() -{ - editOpenVymLink (true); -} - -void Main::editOpenMultipleVymLinks() -{ - QString currentVymLink; - VymModel *m = currentModel(); - if (m) - { - QStringList vl = m->getVymLinks(); - openVymLinks (vl, true); - } -} - -void Main::editVymLink() -{ - VymModel *m = currentModel(); - if (m) - { - BranchItem *bi = m->getSelectedBranch(); - if (bi) - { - QStringList filters; - filters <<"VYM map (*.vym)"; - QFileDialog fd; - fd.setWindowTitle (vymName+" - " +tr("Link to another map")); - fd.setNameFilters (filters); - fd.setWindowTitle(vymName+" - " +tr("Link to another map")); - fd.setDirectory (lastMapDir); - fd.setAcceptMode (QFileDialog::AcceptOpen); - if (! bi->getVymLink().isEmpty() ) - fd.selectFile( bi->getVymLink() ); - fd.show(); - - QString fn; - if ( fd.exec() == QDialog::Accepted &&!fd.selectedFiles().isEmpty() ) - { - QString fn = fd.selectedFiles().first(); - lastMapDir = QDir (fd.directory().path()); - m->setVymLink (fn); - } - } - } -} - -void Main::editDeleteVymLink() -{ - VymModel *m=currentModel(); - if (m) m->deleteVymLink(); -} - -void Main::editToggleHideExport() -{ - VymModel *m=currentModel(); - if (m) m->toggleHideExport(); -} - -void Main::editToggleTask() -{ - VymModel *m=currentModel(); - if (m) m->toggleTask(); -} - -void Main::editCycleTaskStatus() -{ - VymModel *m=currentModel(); - if (m) m->cycleTaskStatus(); -} - -void Main::editTaskSleepN() -{ - VymModel *m=currentModel(); - if (m) - { - int n=((QAction*)sender())->data().toInt(); - Task *task=m->getSelectedTask(); - if (task) - { - bool ok=true; - QString s; - if (n<0) - { - n=task->getDaysSleep(); - if (n<=0) n=0; - - LineEditDialog *dia=new LineEditDialog(this); - dia->setLabel(tr("Enter sleep time (number of days or date YYYY-MM-DD or DD.MM[.YYYY]","task sleep time dialog")); - dia->setText(QString("%1").arg(n)); - centerDialog (dia); - if (dia->exec() == QDialog::Accepted) - { - ok=true; - s=dia->getText(); - } else - ok=false; - - delete dia; - } else - s=QString("%1").arg(n); - - if (ok && !m->setTaskSleep(s) ) - QMessageBox::warning(0, - tr("Warning"), - tr("Couldn't set sleep time to %1.\n").arg(s)); - } - } -} - -void Main::editAddTimestamp() -{ - VymModel *m=currentModel(); - if (m) m->addTimestamp(); -} - -void Main::editMapProperties() -{ - VymModel *m = currentModel(); - if (!m) return; - - ExtraInfoDialog dia; - dia.setMapName ( m->getFileName() ); - dia.setMapTitle ( m->getTitle() ); - dia.setAuthor ( m->getAuthor() ); - dia.setComment ( m->getComment() ); - dia.setReadOnly ( m->isReadOnly() ); - - // Calc some stats - QString stats; - stats += tr("%1 items on map\n","Info about map").arg (m->getScene()->items().size(),6); - - uint b = 0; - uint f = 0; - uint n = 0; - uint xl = 0; - BranchItem *cur = NULL; - BranchItem *prev = NULL; - m->nextBranch(cur, prev); - while (cur) - { - if (!cur->getNote().isEmpty() ) n++; - f += cur->imageCount(); - b++; - xl += cur->xlinkCount(); - m->nextBranch(cur,prev); - } - - stats += QString ("%1 %2\n").arg (m->branchCount(),6).arg(tr("branches","Info about map") ); - stats += QString ("%1 %2\n").arg (n,6).arg(tr("notes","Info about map") ); - stats += QString ("%1 %2\n").arg (f,6).arg(tr("images","Info about map") ); - stats += QString ("%1 %2\n").arg (m->taskCount(),6 ).arg(tr("tasks","Info about map") ); - stats += QString ("%1 %2\n").arg (m->slideCount(),6 ).arg(tr("slides","Info about map") ); - stats += QString ("%1 %2\n").arg (xl/2,6).arg(tr("xLinks","Info about map") ); - dia.setStats (stats); - - // Finally show dialog - if (dia.exec() == QDialog::Accepted) - { - m->setAuthor (dia.getAuthor() ); - m->setComment (dia.getComment() ); - m->setTitle (dia.getMapTitle() ); - } -} - -void Main::editMoveUp() -{ - MapEditor *me = currentMapEditor(); - VymModel *m = currentModel(); - if (me && m && me->getState() != MapEditor::EditingHeading) m->moveUp(); -} - -void Main::editMoveDown() -{ - MapEditor *me = currentMapEditor(); - VymModel *m = currentModel(); - if (me && m && me->getState() != MapEditor::EditingHeading) m->moveDown(); -} - -void Main::editDetach() -{ - VymModel *m=currentModel(); - if (m) m->detach(); -} - -void Main::editSortChildren() -{ - VymModel *m=currentModel(); - if (m) m->sortChildren(false); -} - -void Main::editSortBackChildren() -{ - VymModel *m=currentModel(); - if (m) m->sortChildren(true); -} - -void Main::editToggleScroll() -{ - VymModel *m=currentModel(); - if (m) m->toggleScroll(); -} - -void Main::editExpandAll() -{ - VymModel *m=currentModel(); - if (m) m->emitExpandAll(); -} - -void Main::editExpandOneLevel() -{ - VymModel *m=currentModel(); - if (m) m->emitExpandOneLevel(); -} - -void Main::editCollapseOneLevel() -{ - VymModel *m=currentModel(); - if (m) m->emitCollapseOneLevel(); -} - -void Main::editCollapseUnselected() -{ - VymModel *m=currentModel(); - if (m) m->emitCollapseUnselected(); -} - -void Main::editUnscrollChildren() -{ - VymModel *m=currentModel(); - if (m) m->unscrollChildren(); -} - -void Main::editGrowSelectionSize() -{ - VymModel *m=currentModel(); - if (m) m->growSelectionSize(); -} - -void Main::editShrinkSelectionSize() -{ - VymModel *m=currentModel(); - if (m) m->shrinkSelectionSize(); -} - -void Main::editResetSelectionSize() -{ - VymModel *m=currentModel(); - if (m) m->resetSelectionSize(); -} - -void Main::editAddAttribute() -{ - VymModel *m=currentModel(); - if (m) - { - - m->addAttribute(); - } -} - -void Main::editAddMapCenter() -{ - VymModel *m=currentModel(); - if (m) - { - m->select (m->addMapCenter ()); - MapEditor *me=currentMapEditor(); - if (me) - { - m->setHeadingPlainText(""); - me->editHeading(); - } - } -} - -void Main::editNewBranch() -{ - VymModel *m=currentModel(); - if (m) - { - BranchItem *bi=m->addNewBranch(); - if (!bi) return; - - if (actionSettingsAutoEditNewBranch->isChecked() - && !actionSettingsAutoSelectNewBranch->isChecked() ) - prevSelection=m->getSelectString(); - else - prevSelection=QString(); - - if (actionSettingsAutoSelectNewBranch->isChecked() - || actionSettingsAutoEditNewBranch->isChecked()) - { - m->select (bi); - if (actionSettingsAutoEditNewBranch->isChecked()) - currentMapEditor()->editHeading(); - } - } -} - -void Main::editNewBranchBefore() -{ - VymModel *m=currentModel(); - if (m) - { - BranchItem *bi=m->addNewBranchBefore(); - - if (bi) - m->select (bi); - else - return; - - if (actionSettingsAutoEditNewBranch->isChecked()) - { - if (!actionSettingsAutoSelectNewBranch->isChecked()) - prevSelection=m->getSelectString(bi); - currentMapEditor()->editHeading(); - } - } -} - -void Main::editNewBranchAbove() -{ - VymModel *m=currentModel(); - if (m) - { - BranchItem *selbi=m->getSelectedBranch(); - if (selbi) - { - BranchItem *bi=m->addNewBranch(selbi,-3); - - if (bi) - m->select (bi); - else - return; - - if (actionSettingsAutoEditNewBranch->isChecked()) - { - if (!actionSettingsAutoSelectNewBranch->isChecked()) - prevSelection=m->getSelectString (bi); - currentMapEditor()->editHeading(); - } - } - } -} - -void Main::editNewBranchBelow() -{ - VymModel *m=currentModel(); - if (m) - { - BranchItem *selbi=m->getSelectedBranch(); - if (selbi) - { - BranchItem *bi=m->addNewBranch(selbi,-1); - - if (bi) - m->select (bi); - else - return; - - if (actionSettingsAutoEditNewBranch->isChecked()) - { - if (!actionSettingsAutoSelectNewBranch->isChecked()) - prevSelection=m->getSelectString(bi); - currentMapEditor()->editHeading(); - } - } - } -} - -void Main::editImportAdd() -{ - fileLoad (ImportAdd); -} - -void Main::editImportReplace() -{ - fileLoad (ImportReplace); -} - -void Main::editSaveBranch() -{ - fileSaveAs (PartOfMap); -} - -void Main::editDeleteKeepChildren() -{ - VymModel *m=currentModel(); - if (m) m->deleteKeepChildren(); -} - -void Main::editDeleteChildren() -{ - VymModel *m=currentModel(); - if (m) m->deleteChildren(); -} - -void Main::editDeleteSelection() -{ - VymModel *m=currentModel(); - if (m) m->deleteSelection(); -} - -void Main::editLoadImage() -{ - VymModel *m=currentModel(); - if (m) m->loadImage(); -} - -void Main::editSaveImage() -{ - VymModel *m=currentModel(); - if (m) m->saveImage(); -} - -void Main::editEditXLink(QAction *a) -{ - VymModel *m=currentModel(); - if (m) - { - BranchItem *selbi=m->getSelectedBranch(); - if (selbi) - { - Link *l=selbi->getXLinkItemNum(branchXLinksContextMenuEdit->actions().indexOf(a))->getLink(); - if (l && m->select (l->getBeginLinkItem() ) ) - m->editXLink(); - } - } -} - -void Main::popupFollowXLink() -{ - branchXLinksContextMenuFollow->exec( QCursor::pos()); -} - -void Main::editFollowXLink(QAction *a) -{ - VymModel *m=currentModel(); - - if (m) - m->followXLink(branchXLinksContextMenuFollow->actions().indexOf(a)); -} - -void Main::editToggleTarget() -{ - VymModel *m=currentModel(); - if (m) m->toggleTarget(); -} - -bool Main::initTargetsMenu( VymModel *model, QMenu *menu) -{ - if (model) - { - ItemList targets = model->getTargets(); - - menu->clear(); - - QStringList targetNames; - QList targetIDs; - - // Build QStringList with all names of targets - QMap::const_iterator i; - i = targets.constBegin(); - while (i != targets.constEnd()) - { - targetNames.append( i.value() ); - targetIDs.append( i.key() ); - ++i; - } - - // Sort list of names - targetNames.sort( Qt::CaseInsensitive ); - - // Build menu based on sorted names - while ( !targetNames.isEmpty() ) - { - // Find target by value - i = targets.constBegin(); - while (i != targets.constEnd()) - { - if ( i.value() == targetNames.first() ) break; - ++i; - } - - menu->addAction( targetNames.first() )->setData( i.key() ); - targetNames.removeFirst(); - targets.remove( i.key() ); - } - return true; - } - return false; -} - -void Main::editGoToTarget() -{ - VymModel *model = currentModel(); - if (initTargetsMenu( model, targetsContextMenu ) ) - { - QAction *a = targetsContextMenu->exec (QCursor::pos()); - if (a) model->select (model->findID (a->data().toUInt() ) ); - } -} - -void Main::editMoveToTarget() -{ - VymModel *model = currentModel(); - if (initTargetsMenu( model, targetsContextMenu ) ) - { - QAction *a = targetsContextMenu->exec (QCursor::pos()); - if (a) - { - TreeItem *ti = model->findID ( a->data().toUInt() ); - BranchItem *selbi = model->getSelectedBranch(); - if (!selbi) return; - - if (ti && ti->isBranchLikeType() && selbi) - { - BranchItem *pi = selbi->parentBranch(); - // If branch below exists, select that one - // Makes it easier to quickly resort using the MoveTo function - BranchItem *below = pi->getBranchNum( selbi->num() + 1 ); - LinkableMapObj *lmo = selbi->getLMO(); - QPointF orgPos; - if (lmo) orgPos = lmo->getAbsPos(); - - if (model->relinkBranch ( selbi, (BranchItem*)ti, -1, true, orgPos) ) - { - if (below) - model->select (below); - else - if (pi) model->select (pi); - } - } - } - } -} - -void Main::editSelectPrevious() -{ - VymModel *m=currentModel(); - if (m) m->selectPrevious(); -} - -void Main::editSelectNext() -{ - VymModel *m=currentModel(); - if (m) m->selectNext(); -} - -void Main::editSelectNothing() -{ - VymModel *m=currentModel(); - if (m) m->unselectAll(); -} - -void Main::editOpenFindResultWidget() -{ - if (!findResultWidget->parentWidget()->isVisible()) - { -// findResultWidget->parentWidget()->show(); - findResultWidget->popup(); - } else - findResultWidget->parentWidget()->hide(); -} - -#include "findwidget.h" // FIXME-4 Integrated FRW and FW -void Main::editFindNext(QString s) -{ - Qt::CaseSensitivity cs=Qt::CaseInsensitive; - VymModel *m=currentModel(); - if (m) - { - if (m->findAll (findResultWidget->getResultModel(),s,cs) ) - findResultWidget->setStatus (FindWidget::Success); - else - findResultWidget->setStatus (FindWidget::Failed); - } -} - -void Main::editFindDuplicateURLs() //FIXME-4 feature: use FindResultWidget for display -{ - VymModel *m=currentModel(); - if (m) m->findDuplicateURLs(); -} - -void Main::updateQueries (VymModel* ) //FIXME-4 disabled for now to avoid selection in FRW -{ - return; -/* - qDebug() << "MW::updateQueries m="<setChecked(true); - } -} - -void Main::formatLinkStyleParabel() -{ - VymModel *m=currentModel(); - if (m) - { - m->setMapLinkStyle("StyleParabel"); - actionFormatLinkStyleParabel->setChecked(true); - } -} - -void Main::formatLinkStylePolyLine() -{ - VymModel *m=currentModel(); - if (m) - { - m->setMapLinkStyle("StylePolyLine"); - actionFormatLinkStylePolyLine->setChecked(true); - } -} - -void Main::formatLinkStylePolyParabel() -{ - VymModel *m=currentModel(); - if (m) - { - m->setMapLinkStyle("StylePolyParabel"); - actionFormatLinkStylePolyParabel->setChecked(true); - } -} - -void Main::formatSelectBackColor() -{ - VymModel *m=currentModel(); - if (m) m->selectMapBackgroundColor(); -} - -void Main::formatSelectBackImage() -{ - VymModel *m=currentModel(); - if (m) - m->selectMapBackgroundImage(); -} - -void Main::formatSelectLinkColor() -{ - VymModel *m=currentModel(); - if (m) - { - QColor col = QColorDialog::getColor( m->getMapDefLinkColor(), this ); - m->setMapDefLinkColor( col ); - } -} - -void Main::formatSelectSelectionColor() -{ - VymModel *m=currentModel(); - if (m) - { - QColor col = QColorDialog::getColor( m->getMapDefLinkColor(), this ); - m->setSelectionColor (col); - } - -} - -void Main::formatSelectFont() -{ - VymModel *m=currentModel(); - if (m) - { - bool ok; - QFont font = QFontDialog::getFont( &ok, m->getMapDefaultFont(), this); - if (ok) m->setMapDefaultFont (font); - } -} - -void Main::formatToggleLinkColorHint() -{ - VymModel *m=currentModel(); - if (m) m->toggleMapLinkColorHint(); -} - -void Main::formatHideLinkUnselected() //FIXME-4 get rid of this with imagepropertydialog -{ - VymModel *m=currentModel(); - if (m) - m->setHideLinkUnselected(actionFormatHideLinkUnselected->isChecked()); -} - -void Main::viewZoomReset() -{ - MapEditor *me=currentMapEditor(); - if (me) me->setViewCenterTarget(); -} - -void Main::viewZoomIn() -{ - MapEditor *me=currentMapEditor(); - if (me) me->setZoomFactorTarget (me->getZoomFactorTarget()*1.15); -} - -void Main::viewZoomOut() -{ - MapEditor *me=currentMapEditor(); - if (me) me->setZoomFactorTarget (me->getZoomFactorTarget()*0.85); -} - -void Main::viewRotateCounterClockwise() -{ - MapEditor *me=currentMapEditor(); - if (me) me->setAngleTarget (me->getAngleTarget()-10); -} - -void Main::viewRotateClockwise() -{ - MapEditor *me=currentMapEditor(); - if (me) me->setAngleTarget (me->getAngleTarget()+10); -} - -void Main::viewCenter() -{ - VymModel *m=currentModel(); - if (m) m->emitShowSelection(); -} - -void Main::networkStartServer() -{ - VymModel *m=currentModel(); - if (m) m->newServer(); -} - -void Main::networkConnect() -{ - VymModel *m=currentModel(); - if (m) m->connectToServer(); -} - -void Main::downloadFinished() // only used for drop events in mapeditor and VM::downloadImage -{ - QString s; - DownloadAgent *agent = static_cast(sender()); - agent->isSuccess() ? s="Success" : s="Error "; - - /* - qDebug()<<"Main::downloadFinished "; - qDebug()<<" result" << s; - qDebug()<<" msg" << agent->getResultMessage(); - */ - - QString script = agent->getFinishedScript(); - VymModel *model=getModel (agent->getFinishedScriptModelID()); - if (!script.isEmpty() && model) - { - script.replace("$TMPFILE",agent->getDestination()); - model->execute(script); - } -} - -bool Main::settingsPDF() -{ - // Default browser is set in constructor - bool ok; - QString text = QInputDialog::getText( - this, - "VYM", tr("Set application to open PDF files")+":", QLineEdit::Normal, - settings.value("/system/readerPDF").toString(), &ok); - if (ok) - settings.setValue ("/system/readerPDF",text); - return ok; -} - - -bool Main::settingsURL() -{ - // Default browser is set in constructor - bool ok; - QString text = QInputDialog::getText( - this, - "VYM", tr("Set application to open an URL")+":", QLineEdit::Normal, - settings.value("/system/readerURL").toString() - , &ok); - if (ok) - settings.setValue ("/system/readerURL",text); - return ok; -} - -void Main::settingsZipTool() -{ - // Default zip tool is 7z on windows, zip/unzip elsewhere - bool ok = false; - -#if defined(Q_OS_WIN32) - QString filter; - filter = "Windows executable (*.exe);;"; - - QString fn = QFileDialog::getOpenFileName( - this, - vymName + " - " + tr("Set application to zip/unzip files") + ":", - zipToolPath, - filter); - - if (!fn.isEmpty() ) ok = true; - -#else - - QString fn = QInputDialog::getText( - this, - vymName, tr("Set application to zip/unzip files")+":", QLineEdit::Normal, - zipToolPath, &ok); -#endif - - if (ok) - { - zipToolPath = fn; - settings.setValue ("/system/zipToolPath", zipToolPath); - } -} - -void Main::settingsMacroDir() -{ - QDir defdir(vymBaseDir.path() + "/macros"); - if (!defdir.exists()) - defdir=vymBaseDir; - QDir dir=QFileDialog::getExistingDirectory ( - this, - tr ("Directory with vym macros:"), - settings.value ("/macros/macroDir",defdir.path()).toString() - ); - if (dir.exists()) - settings.setValue ("/macros/macroDir",dir.absolutePath()); -} - -void Main::settingsUndoLevels() -{ - bool ok; - int i = QInputDialog::getInt( - this, - "QInputDialog::getInt()", - tr("Number of undo/redo levels:"), settings.value("/history/stepsTotal",1000).toInt(), 0, 100000, 1, &ok); - if (ok) - { - settings.setValue ("/history/stepsTotal",i); - QMessageBox::information( this, tr( "VYM -Information:" ), - tr("Settings have been changed. The next map opened will have \"%1\" undo/redo levels").arg(i)); - } -} - -bool Main::useAutosave() -{ - return actionSettingsToggleAutosave->isChecked(); -} - -void Main::setAutosave(bool b) -{ - actionSettingsToggleAutosave->setChecked(b); -} - -void Main::settingsAutosaveTime() -{ - bool ok; - int i = QInputDialog::getInt( - this, - vymName, - tr("Number of seconds before autosave:"), settings.value("/system/autosave/ms").toInt() / 1000, 10, 60000, 1, &ok); - if (ok) - settings.setValue ("/system/autosave/ms",i * 1000); -} - -void Main::settingsDefaultMapAuthor() -{ - bool ok; - QString s = QInputDialog::getText( - this, - vymName, tr("Set author for new maps (used in lockfile)") + ":", QLineEdit::Normal, - settings.value("/user/name", tr("unknown user","default name for map author in settings")).toString(), - &ok); - if (ok) settings.setValue("/user/name", s); -} - -void Main::settingsShowParentsLevelFindResults() -{ - bool ok; - int i = QInputDialog::getInt( - this, - vymName, - tr("Number of parents shown in find results:"), findResultWidget->getResultModel()->getShowParentsLevel(), 0, 10, 0, &ok); - if (ok) findResultWidget->getResultModel()->setShowParentsLevel(i); -} - -void Main::settingsShowParentsLevelTasks() -{ - bool ok; - int i = QInputDialog::getInt( - this, - vymName, - tr("Number of parents shown for a task:"), taskModel->getShowParentsLevel(), 0, 10, 0, &ok); - if (ok) taskModel->setShowParentsLevel(i); -} - -void Main::settingsToggleAutoLayout() -{ - settings.setValue ("/mainwindow/autoLayout/use",actionSettingsToggleAutoLayout->isChecked() ); -} - -void Main::settingsToggleWriteBackupFile() -{ - settings.setValue ("/system/writeBackupFile",actionSettingsWriteBackupFile->isChecked() ); -} - -void Main::settingsToggleAnimation() -{ - settings.setValue ("/animation/use",actionSettingsUseAnimation->isChecked() ); -} - -void Main::settingsToggleDownloads() -{ - downloadsEnabled(true); -} - -void Main::windowToggleNoteEditor() -{ - if (noteEditor->parentWidget()->isVisible() ) - noteEditor->parentWidget()->hide(); - else - { - noteEditor->parentWidget()->show(); - noteEditor->setFocus(); - } -} - -void Main::windowToggleTreeEditor() -{ - if ( tabWidget->currentWidget()) - vymViews.at(tabWidget->currentIndex())->toggleTreeEditor(); -} - -void Main::windowToggleTaskEditor() -{ - if (taskEditor->parentWidget()->isVisible() ) - { - taskEditor->parentWidget()->hide(); - actionViewToggleTaskEditor->setChecked (false); - } else - { - taskEditor->parentWidget()->show(); - actionViewToggleTaskEditor->setChecked (true); - } -} - -void Main::windowToggleSlideEditor() -{ - if ( tabWidget->currentWidget()) - vymViews.at(tabWidget->currentIndex())->toggleSlideEditor(); -} - -void Main::windowToggleScriptEditor() -{ - if (scriptEditor->parentWidget()->isVisible() ) - { - scriptEditor->parentWidget()->hide(); - actionViewToggleScriptEditor->setChecked (false); - } else - { - scriptEditor->parentWidget()->show(); - actionViewToggleScriptEditor->setChecked (true); - } -} - -void Main::windowToggleHistory() -{ - if (historyWindow->isVisible()) - historyWindow->parentWidget()->hide(); - else - historyWindow->parentWidget()->show(); -} - -void Main::windowToggleProperty() -{ - if (branchPropertyEditor->parentWidget()->isVisible()) - branchPropertyEditor->parentWidget()->hide(); - else - branchPropertyEditor->parentWidget()->show(); - branchPropertyEditor->setModel (currentModel() ); -} - -void Main::windowShowHeadingEditor() -{ - headingEditorDW->show(); -} - -void Main::windowToggleHeadingEditor() -{ - if (headingEditor->parentWidget()->isVisible() ) - headingEditor->parentWidget()->hide(); - else - { - headingEditor->parentWidget()->show(); - headingEditor->setFocus(); - } -} - -void Main::windowToggleAntiAlias() -{ - bool b=actionViewToggleAntiAlias->isChecked(); - MapEditor *me; - for (int i=0;igetMapEditor(); - if (me) me->setAntiAlias(b); - } - -} - -bool Main::isAliased() -{ - return actionViewToggleAntiAlias->isChecked(); -} - -bool Main::hasSmoothPixmapTransform() -{ - return actionViewToggleSmoothPixmapTransform->isChecked(); -} - -void Main::windowToggleSmoothPixmap() -{ - bool b=actionViewToggleSmoothPixmapTransform->isChecked(); - MapEditor *me; - for (int i=0;igetMapEditor(); - if (me) me->setSmoothPixmap(b); - } -} - -void Main::updateHistory(SimpleSettings &undoSet) -{ - historyWindow->update (undoSet); -} - -void Main::updateHeading() -{ - VymModel *m=currentModel(); - if (m) m->setHeading (headingEditor->getVymText() ); -} - -void Main::updateNoteFlag() -{ - // this slot is connected to noteEditor::textHasChanged() - VymModel *m=currentModel(); - if (m) m->updateNoteFlag(); -} - -void Main::updateNoteEditor(QModelIndex index ) //FIXME-4 maybe change to TreeItem as parameter? -{ - if (index.isValid() ) - { - TreeItem *ti=((VymModel*) QObject::sender())->getItem(index); - /* - qDebug()<< "Main::updateNoteEditor model="<getVymLink(); - if (!s.isEmpty() ) status += "Link: " + s; - if (!status.isEmpty() ) statusMessage (status); - - headingEditor->setVymText (ti->getHeading() ); - - // Select in TaskEditor, if necessary - Task *t = NULL; - if (ti->isBranchLikeType() ) - t = ((BranchItem*)ti)->getTask(); - - if (t) - taskEditor->select (t); - else - taskEditor->clearSelection(); - } else - noteEditor->setInactive(); - - updateActions(); - } -} - -void Main::updateDockWidgetTitles( VymModel *model) -{ - QString s; - if (model && !model->isRepositionBlocked() ) - { - BranchItem *bi = model->getSelectedBranch(); - if (bi) s = bi->getHeadingPlain(); - - noteEditor->setEditorTitle(s); - noteEditorDW->setWindowTitle (noteEditor->getEditorTitle() ); - } -} - -void Main::updateActions() -{ - // updateActions is also called when satellites are closed - actionViewToggleNoteEditor->setChecked (noteEditor->parentWidget()->isVisible()); - actionViewToggleTaskEditor->setChecked (taskEditor->parentWidget()->isVisible()); - actionViewToggleHistoryWindow->setChecked (historyWindow->parentWidget()->isVisible()); - actionViewTogglePropertyEditor->setChecked (branchPropertyEditor->parentWidget()->isVisible()); - actionViewToggleScriptEditor->setChecked (scriptEditor->parentWidget()->isVisible()); - - VymView *vv=currentView(); - if (vv) - { - actionViewToggleTreeEditor->setChecked ( vv->treeEditorIsVisible() ); - actionViewToggleSlideEditor->setChecked( vv->slideEditorIsVisible() ); - } else - { - actionViewToggleTreeEditor->setChecked ( false ); - actionViewToggleSlideEditor->setChecked ( false ); - } - - VymModel *m =currentModel(); - if ( m ) - { - // readonly mode - if (m->isReadOnly() ) - { - // Disable toolbars - standardFlagsMaster->setEnabled (false); - - // Disable map related actions - foreach (QAction *a, restrictedMapActions) - a->setEnabled( false ); - - // FIXME-2 updateactions: refactor actionListFiles: probably not needed, wrong actions there atm - } else - { // not readonly // FIXME-2 updateactions: maybe only required in testing, as mode should not change - - // Enable toolbars - standardFlagsMaster->setEnabled (true); - - // Enable map related actions - foreach (QAction *a, restrictedMapActions) - a->setEnabled( true ); - - } - // Enable all files actions first - for (int i=0; isetEnabled(true); - - foreach (QAction *a, unrestrictedMapActions) - a->setEnabled( true ); - - // Disable other actions for now - for (int i=0; isetEnabled(false); - - for (int i=0; isetEnabled(false); - - // Link style in context menu - switch (m->getMapLinkStyle()) - { - case LinkableMapObj::Line: - actionFormatLinkStyleLine->setChecked(true); - break; - case LinkableMapObj::Parabel: - actionFormatLinkStyleParabel->setChecked(true); - break; - case LinkableMapObj::PolyLine: - actionFormatLinkStylePolyLine->setChecked(true); - break; - case LinkableMapObj::PolyParabel: - actionFormatLinkStylePolyParabel->setChecked(true); - break; - default: - break; - } - - // Update colors - QPixmap pix( 16, 16 ); - pix.fill( m->getMapBackgroundColor() ); - actionFormatBackColor->setIcon( pix ); - pix.fill( m->getSelectionColor() ); - actionFormatSelectionColor->setIcon( pix ); - pix.fill( m->getMapDefLinkColor() ); - actionFormatLinkColor->setIcon( pix ); - - // Selection history - if (!m->canSelectPrevious() ) - actionSelectPrevious->setEnabled(false); - - if (!m->canSelectNext() ) - actionSelectNext->setEnabled(false); - - if (!m->getSelectedItem() ) - actionSelectNothing->setEnabled (false); - - // Save - if (! m->hasChanged() ) - actionFileSave->setEnabled( false); - - // Undo/Redo - if (! m->isUndoAvailable()) - actionUndo->setEnabled( false); - - if (! m->isRedoAvailable()) - actionRedo->setEnabled( false); - - // History window - historyWindow->setWindowTitle (vymName + " - " +tr("History for %1","Window Caption").arg(m->getFileName())); - - // Expanding/collapsing - actionExpandAll->setEnabled (true); - actionExpandOneLevel->setEnabled (true); - actionCollapseOneLevel->setEnabled (true); - actionCollapseUnselected->setEnabled (true); - - if (m->getMapLinkColorHint()==LinkableMapObj::HeadingColor) - actionFormatLinkColorHint->setChecked(true); - else - actionFormatLinkColorHint->setChecked(false); - - // Export last - QString s, t, u, v; - if (m && m->exportLastAvailable(s,t,u, v) ) - actionFileExportLast->setEnabled (true); - else - { - actionFileExportLast->setEnabled (false); - t=u=""; - s=" - "; - } - actionFileExportLast->setText( tr( "Export in last used format (%1) to: %2","status tip" ).arg(s).arg(u)); - - TreeItem *selti=m->getSelectedItem(); - BranchItem *selbi=m->getSelectedBranch(); - - if (selti) - { // Tree Item selected - actionToggleTarget->setChecked (selti->isTarget() ); - actionDelete->setEnabled (true); - actionDeleteChildren->setEnabled (true); - - if (selbi || selti->getType()==TreeItem::Image) - { - actionFormatHideLinkUnselected->setChecked (((MapItem*)selti)->getHideLinkUnselected()); - actionFormatHideLinkUnselected->setEnabled (true); - } - - if (selbi) - { // Branch Item selected - for (int i=0; isetEnabled(true); - - actionHeading2URL->setEnabled (true); - - // Note - actionGetURLsFromNote->setEnabled (!selbi->getNote().isEmpty()); - - // Take care of xlinks - // FIXME-4 similar code in mapeditor mousePressEvent - int b=selbi->xlinkCount(); - branchXLinksContextMenuEdit->setEnabled(b); - branchXLinksContextMenuFollow->setEnabled(b); - branchXLinksContextMenuEdit->clear(); - branchXLinksContextMenuFollow->clear(); - if (b) - { - BranchItem *bi; - QString s; - for (int i=0; ixlinkCount();++i) - { - bi=selbi->getXLinkItemNum(i)->getPartnerBranch(); - if (bi) - { - s=bi->getHeadingPlain(); - if (s.length()>xLinkMenuWidth) - s=s.left(xLinkMenuWidth)+"..."; - branchXLinksContextMenuEdit->addAction (s); - branchXLinksContextMenuFollow->addAction (s); - } - } - } - //Standard Flags - standardFlagsMaster->updateToolBar (selbi->activeStandardFlagNames() ); - - // System Flags - actionToggleScroll->setEnabled (true); - if ( selbi->isScrolled() ) - actionToggleScroll->setChecked(true); - else - actionToggleScroll->setChecked(false); - - actionGetBugzillaDataSubtree->setEnabled (bugzillaClientAvailable); - if ( selti->getURL().isEmpty() ) - { - actionOpenURL->setEnabled (false); - actionOpenURLTab->setEnabled (false); - actionGetBugzillaData->setEnabled (false); - } - else - { - actionOpenURL->setEnabled (true); - actionOpenURLTab->setEnabled (true); - actionGetBugzillaData->setEnabled ( - selti->getURL().contains("bugzilla") && bugzillaClientAvailable); - } - if ( selti->getVymLink().isEmpty() ) - { - actionOpenVymLink->setEnabled (false); - actionOpenVymLinkBackground->setEnabled (false); - actionDeleteVymLink->setEnabled (false); - } else - { - actionOpenVymLink->setEnabled (true); - actionOpenVymLinkBackground->setEnabled (true); - actionDeleteVymLink->setEnabled (true); - } - - if (!selbi->canMoveUp()) - actionMoveUp->setEnabled (false); - - if (!selbi->canMoveDown()) - actionMoveDown->setEnabled (false); - - if (selbi->branchCount() <2 ) - { - actionSortChildren->setEnabled (false); - actionSortBackChildren->setEnabled (false); - } - - actionToggleHideExport->setEnabled (true); - actionToggleHideExport->setChecked (selbi->hideInExport() ); - - actionToggleTask->setEnabled (true); - if (!selbi->getTask() ) - actionToggleTask->setChecked (false); - else - actionToggleTask->setChecked (true); - - if (!clipboardEmpty) - actionPaste->setEnabled (true); - else - actionPaste->setEnabled (false); - - actionToggleTarget->setEnabled (true); - } // end of BranchItem - - if ( selti->getType()==TreeItem::Image) - { - for (int i=0; isetEnabled(false); - - standardFlagsMaster->setEnabled (false); - - actionOpenURL->setEnabled (false); - actionOpenVymLink->setEnabled (false); - actionOpenVymLinkBackground->setEnabled (false); - actionDeleteVymLink->setEnabled (false); - actionToggleHideExport->setEnabled (true); - actionToggleHideExport->setChecked (selti->hideInExport() ); - - actionToggleTarget->setEnabled (true); - - actionPaste->setEnabled (false); - actionDelete->setEnabled (true); - - actionGrowSelectionSize->setEnabled (true); - actionShrinkSelectionSize->setEnabled (true); - actionResetSelectionSize->setEnabled (true); - } // Image - } // TreeItem - - // Check (at least for some) multiple selection //FIXME-4 - QList selItems=m->getSelectedItems(); - if (selItems.count()>0 ) - { - actionDelete->setEnabled (true); - actionToggleHideExport->setEnabled (true); - actionToggleHideExport->setChecked (false); - } - - QList selbis=m->getSelectedBranches(); - if (selbis.count()>0 ) - actionFormatColorBranch->setEnabled (true); - - } else - { - // No map available - for (int i=0; isetEnabled(false); - - foreach (QAction *a, unrestrictedMapActions) - a->setEnabled( false ); - - // Disable toolbars - standardFlagsMaster->setEnabled (false); - } -} - -Main::ModMode Main::getModMode() -{ - if (actionModModeColor->isChecked()) return ModModeColor; - if (actionModModeCopy->isChecked()) return ModModeCopy; - if (actionModModeXLink->isChecked()) return ModModeXLink; - return ModModeNone; -} - -bool Main::autoEditNewBranch() -{ - return actionSettingsAutoEditNewBranch->isChecked(); -} - -bool Main::autoSelectNewBranch() -{ - return actionSettingsAutoSelectNewBranch->isChecked(); -} - -void Main::setScriptFile (const QString &fn) -{ - scriptEditor->setScriptFile (fn); -} - -QVariant Main::execute (const QString &script) -{ - VymModel *m=currentModel(); - if (m) return m->execute (script); - return QVariant(); -} - -void Main::executeEverywhere (const QString &script) -{ - foreach (VymView *vv,vymViews) - { - VymModel *m=vv->getModel(); - if (m) m->execute (script); - } -} - -void Main::gotoWindow (const int &n) -{ - if (n < tabWidget->count() && n>=0 ) - tabWidget->setCurrentIndex (n); -} - -void Main::windowNextEditor() -{ - if (tabWidget->currentIndex() < tabWidget->count()) - tabWidget->setCurrentIndex (tabWidget->currentIndex() +1); -} - -void Main::windowPreviousEditor() -{ - if (tabWidget->currentIndex() >0) - tabWidget->setCurrentIndex (tabWidget->currentIndex() -1); -} - -void Main::nextSlide() -{ - VymView *cv=currentView(); - if (cv) cv->nextSlide(); -} - - -void Main::previousSlide() -{ - VymView *cv=currentView(); - if (cv) cv->previousSlide(); -} - -void Main::standardFlagChanged() -{ - MapEditor *me = currentMapEditor(); - VymModel *m = currentModel(); - if (me && m && me->getState() != MapEditor::EditingHeading) - { - if ( actionSettingsUseFlagGroups->isChecked() ) - m->toggleStandardFlag(sender()->objectName(),standardFlagsMaster); - else - m->toggleStandardFlag(sender()->objectName()); - updateActions(); - } -} - -void Main::testFunction1() -{ - /* - VymModel *m = currentModel(); - if (m) - { - m->getMapEditor()->minimizeView(); - } - */ - - /* - QString zp = "c:\\Program Files\\7-Zip\\7z.exe"; - QString zipName = "c:\\Users\\uwdr9542\\x\\ü1.vym"; - QString zipDir = "c:\\Users\\uwdr9542\\x\\y\\"; - */ - QString zp = "c:/Program Files/7-Zip/7z.exe"; - QString zipName = "c:/Users/uwdr9542/x/ü1.vym"; - QString zipDir = "c:/Users/uwdr9542/x/y/"; - - zp = QDir::toNativeSeparators(zp); - zipName = QDir::toNativeSeparators(zipName); - zipDir = QDir::toNativeSeparators(zipDir); - QStringList args; - args << "a" << zipName << "-tzip" << "-scsUTF-8" << "-sccUTF-8" << "*" ; - - VymProcess *zipProc=new VymProcess (); - zipProc->setWorkingDirectory (zipDir); - - zipProc->start(zipToolPath, args); - qDebug() << "7z:" << zp; - qDebug() << "7z started in dir: " << zipProc->workingDirectory(); - qDebug() << "args:" << args; - qDebug() << zipProc->getStdout()<toggleWinter(); -} - -void Main::toggleHideExport() -{ - VymModel *m=currentModel(); - if (!m) return; - if (actionToggleHideMode->isChecked() ) - m->setHideTmpMode (TreeItem::HideExport); - else - m->setHideTmpMode (TreeItem::HideNone); -} - -void Main::testCommand() -{ - if (!currentMapEditor()) return; - scriptEditor->show(); -} - -void Main::helpDoc() -{ - QString locale = QLocale::system().name(); - QString docname; - if (locale.left(2)=="es") - docname="vym_es.pdf"; - else - docname="vym.pdf"; - - QStringList searchList; - QDir docdir; - #if defined(Q_OS_MACX) - searchList << vymBaseDir.path() + "/doc"; - #elif defined(Q_OS_WIN32) - searchList << vymInstallDir.path() + "doc/" + docname; - #else - #if defined(VYM_DOCDIR) - searchList << VYM_DOCDIR; - #endif - // default path in SUSE LINUX - searchList << "/usr/share/doc/packages/vym"; - #endif - - searchList << "doc"; // relative path for easy testing in tarball - searchList << "/usr/share/doc/vym"; // Debian - searchList << "/usr/share/doc/packages";// Knoppix - - bool found=false; - QFile docfile; - for (int i=0; istartDetached( settings.value("/system/readerPDF").toString(),args) ) - { - // error handling - QMessageBox::warning(0, - tr("Warning"), - tr("Couldn't find a viewer to open %1.\n").arg(docfile.fileName())+ - tr("Please use Settings->")+tr("Set application to open PDF files")); - settingsPDF(); - return; - } -} - -void Main::helpDemo() -{ - QStringList filters; - filters <<"VYM example map (*.vym)"; - QFileDialog fd; - fd.setDirectory (vymBaseDir.path() + "/demos"); - fd.setFileMode (QFileDialog::ExistingFiles); - fd.setNameFilters (filters); - fd.setWindowTitle (vymName+ " - " +tr("Load vym example map")); - fd.setAcceptMode (QFileDialog::AcceptOpen); - - QString fn; - if ( fd.exec() == QDialog::Accepted ) - { - lastMapDir=fd.directory().path(); - QStringList flist = fd.selectedFiles(); - QStringList::Iterator it = flist.begin(); - initProgressCounter( flist.count()); - while( it != flist.end() ) - { - fn = *it; - fileLoad(*it, NewMap,VymMap); - ++it; - } - removeProgressCounter(); - } -} - -void Main::helpShortcuts() -{ - ShowTextDialog dia; - dia.useFixedFont (true); - dia.setText( switchboard.getASCII() ); - dia.exec(); -} - -void Main::debugInfo() -{ - QString s; - s = QString ("Platform: %1\n").arg(vymPlatform); - s += QString ("localeName: %1\nPath: %2\n") - .arg(localeName) - .arg(vymBaseDir.path() + "/lang"); - s += QString("vymBaseDir: %1\n").arg(vymBaseDir.path()); - s += QString("currentPath: %1\n").arg(QDir::currentPath()); - s += QString("appDirPath: %1\n").arg(QCoreApplication::applicationDirPath()); - QMessageBox mb; - mb.setText(s); - mb.exec(); -} - -void Main::helpAbout() -{ - AboutDialog ad; - ad.setMinimumSize(500,500); - ad.resize (QSize (500,500)); - ad.exec(); -} - -void Main::helpAboutQT() -{ - QMessageBox::aboutQt( this, "Qt Application Example" ); -} - -void Main::callMacro () -{ - QAction *action = qobject_cast(sender()); - int i=-1; - if (action) - { - i=action->data().toInt(); - QString s=macros.getMacro (i+1); - if (!s.isEmpty()) - { - VymModel *m=currentModel(); - if (m) m->execute(s); - } - } -} - -void Main::downloadReleaseNotesFinished() -{ - DownloadAgent *agent = static_cast(sender()); - QString s; - - if (agent->isSuccess() ) - { - QString page; - if (agent->isSuccess() ) - { - if ( loadStringFromDisk(agent->getDestination(), page) ) - { - ShowTextDialog dia(this); - dia.setText(page); - dia.exec(); - - // Don't load the release notes automatically again - settings.setValue("/downloads/releaseNotes/shownVersion", __VYM_VERSION); - } - } - } else - { - if (debug) - { - qDebug()<<"Main::downloadReleaseNotesFinished "; - qDebug()<<" result: failed"; - qDebug()<<" msg: " << agent->getResultMessage(); - } - } -} - -void Main::checkReleaseNotes() -{ - bool userTriggered; - if (qobject_cast(sender()) ) - userTriggered = true; - else - userTriggered = false; - - if (downloadsEnabled()) - { - if ( userTriggered || - versionLowerThanVym( settings.value("/downloads/releaseNotes/shownVersion", "0.0.1").toString() ) ) - { - QUrl releaseNotesUrl( - //QString("http://localhost/release-notes.php?vymVersion=%1") / - QString("http://www.insilmaril.de/vym/release-notes.php?vymVersion=%1") - .arg(vymVersion) - ); - DownloadAgent *agent = new DownloadAgent(releaseNotesUrl); - connect (agent, SIGNAL( downloadFinished()), this, SLOT(downloadReleaseNotesFinished())); - QTimer::singleShot(0, agent, SLOT(execute())); - } - } else - { - // No downloads enabled - if (userTriggered) - { - // Notification: vym could not download release notes - QMessageBox::warning(0, tr("Warning"), tr("Please allow vym to download release notes!")); - if (downloadsEnabled(userTriggered)) checkUpdates(); - } - } -} - -bool Main::downloadsEnabled (bool userTriggered) -{ - bool result; - if (!userTriggered && settings.value("/downloads/enabled", false).toBool()) - { - result = true; - } else - { - QDate lastAsked = settings.value("/downloads/permissionLastAsked", QDate(1970,1,1) ).toDate(); - if (userTriggered || - !settings.contains("/downloads/permissionLastAsked") || - lastAsked.daysTo( QDate::currentDate()) > 7 - ) - { - QString infotext; - infotext = tr("" - "

Do you allow vym to check online for updates or release notes?

" - "If you allow, vym will " - "
    " - "
  • check once for release notes
  • " - "
  • check regulary for updates and notify you in case you should update, e.g. if there are " - "important bug fixes available
  • " - "
  • receive a cookie with a random ID and send vym version and platform name and the ID " - "(e.g. \"Windows\" or \"Linux\") back to me, Uwe Drechsel." - "

    As vym developer I am motivated to see " - "many people using vym. Of course I am curious to see, on which system vym is used. Maintaining each " - "of the systems requires a lot of my (spare) time.

    " - "

    No other data than above will be sent, especially no private data will be collected or sent." - "(Check the source code, if you don't believe.)" - "

    " - "
  • " - "
" - "If you do not allow, " - "
    " - "
  • nothing will be downloaded and especially I will not be motivated " - "to spend some more thousands of hours on developing a free software tool." - "
" - "Please allow vym to check for updates :-)" - ); - QMessageBox mb( vymName, infotext, - QMessageBox::Information, - QMessageBox::Yes | QMessageBox::Default, - QMessageBox::Cancel | QMessageBox::Escape, - QMessageBox::NoButton); - mb.setButtonText( QMessageBox::Yes, tr("Allow") ); - mb.setButtonText( QMessageBox::Cancel, tr("Do not allow")); - switch( mb.exec() ) - { - case QMessageBox::Yes: - result = true; - QMessageBox::information(0, vymName, - tr("Thank you for enabling downloads!")); - break; - default : - result = false; - break; - } - } else - result = false; - actionSettingsToggleDownloads->setChecked( result ); - settings.setValue("/downloads/enabled", result); - settings.setValue("/downloads/permissionLastAsked", QDate::currentDate().toString(Qt::ISODate)); - } - return result; -} - -void Main::downloadUpdatesFinished(bool userTriggered) -{ - DownloadAgent *agent = static_cast(sender()); - QString s; - - if (agent->isSuccess() ) - { - ShowTextDialog dia; - dia.setWindowTitle( vymName + " - " + tr("Update information") ); - QString page; - if (loadStringFromDisk(agent->getDestination(), page) ) - { - if (page.contains("vymisuptodate")) - { - statusMessage( tr("vym is up to date.","MainWindow")); - if (userTriggered) - { - // Notification: vym is up to date! - dia.setHtml( page ); - dia.exec(); - } - } else if (page.contains("vymneedsupdate")) - { - // Notification: updates available - dia.setHtml( page ); - dia.exec(); - } else - { - // Notification: Unknown version found - dia.setHtml( page ); - dia.exec(); - } - - // Prepare to check again later - settings.setValue("/downloads/updates/lastChecked", QDate::currentDate().toString(Qt::ISODate)); - } else - statusMessage( "Couldn't load update page from " + agent->getDestination()); - - } else - { - statusMessage( "Check for updates failed."); - if (debug) - { - qDebug()<<"Main::downloadUpdatesFinished "; - qDebug()<<" result: failed"; - qDebug()<<" msg: " << agent->getResultMessage(); - } - } -} -void Main::downloadUpdatesFinishedInt() -{ - downloadUpdatesFinished(true); -} - -void Main::downloadUpdates(bool userTriggered) -{ - QUrl updatesUrl( - QString("http://www.insilmaril.de/vym/updates.php?vymVersion=%1") - .arg(vymVersion) - ); - DownloadAgent *agent = new DownloadAgent(updatesUrl); - if (userTriggered) - connect (agent, SIGNAL( downloadFinished()), this, SLOT(downloadUpdatesFinishedInt())); - else - connect (agent, SIGNAL( downloadFinished()), this, SLOT(downloadUpdatesFinished())); - statusMessage( tr("Checking for updates...","MainWindow")); - QTimer::singleShot(0, agent, SLOT(execute())); -} - -void Main::checkUpdates() -{ - bool userTriggered; - if (qobject_cast(sender()) ) - userTriggered = true; - else - userTriggered = false; - - if (downloadsEnabled()) - { - // Too much time passed since last update check? - QDate lastChecked = settings.value("/downloads/updates/lastChecked", QDate(1970,1,1) ).toDate(); - if ( !lastChecked.isValid()) lastChecked = QDate(1970,1,1); - if ( lastChecked.daysTo( QDate::currentDate()) > settings.value("/downloads/updates/checkInterval",3).toInt() || - userTriggered == true) - { - downloadUpdates( userTriggered ); - } - } else - { - // No downloads enabled - if (userTriggered) - { - // Notification: vym could not check for updates - QMessageBox::warning(0, tr("Warning"), tr("Please allow vym to check for updates!")); - if (downloadsEnabled(userTriggered)) checkUpdates(); - } - } -}