void MainForm::contextMenuRequested(const QPoint &point) { QAction *action; QMenu * menu = new QMenu(textEdit); QStringList sl = spellChecker->suggestions(); //if (sl.count() == 0) { action = new QAction(trUtf8("Undo\tCtrl+Z"), this); action->setShortcut(QKeySequence("Ctrl+Z")); connect(action, SIGNAL(triggered()), textEdit, SLOT(undo())); menu->addAction(action); action = new QAction(trUtf8("Redo\tCtrl+Shift+Z"), this); action->setShortcut(QKeySequence("Ctrl+Shift+Z")); connect(action, SIGNAL(triggered()), textEdit, SLOT(redo())); menu->addAction(action); action = new QAction("separator", this); action->setText(""); action->setSeparator(true); menu->addAction(action); action = new QAction(trUtf8("Select All\tCtrl+A"), this); action->setShortcut(QKeySequence("Ctrl+A")); connect(action, SIGNAL(triggered()), textEdit, SLOT(selectAll())); menu->addAction(action); action = new QAction(trUtf8("Cut\tCtrl+X"), this); action->setShortcut(QKeySequence("Ctrl+X")); connect(action, SIGNAL(triggered()), textEdit, SLOT(cut())); menu->addAction(action); action = new QAction(trUtf8("Copy\tCtrl+C"), this); action->setShortcut(QKeySequence("Ctrl+C")); connect(action, SIGNAL(triggered()), textEdit, SLOT(copy())); menu->addAction(action); action = new QAction(trUtf8("Paste\tCtrl+V"), this); action->setShortcut(QKeySequence("Ctrl+V")); connect(action, SIGNAL(triggered()), textEdit, SLOT(paste())); menu->addAction(action); action = new QAction("separator", this); action->setText(""); action->setSeparator(true); menu->addAction(action); action = new QAction(trUtf8("Larger Font\tCtrl++"), this); connect(action, SIGNAL(triggered()), this, SLOT(enlargeFont())); menu->addAction(action); action = new QAction(trUtf8("Smaller Font\tCtrl+-"), this); connect(action, SIGNAL(triggered()), this, SLOT(decreaseFont())); menu->addAction(action); //} if (sl.count() > 0) menu->addSeparator(); foreach(QString str, sl) { QAction * action = menu->addAction(str); connect(action, SIGNAL(triggered()), this, SLOT(replaceWord())); }
bool MainForm::eventFilter(QObject *object, QEvent *event) { /*if (object == scrollArea->widget()) { if (event->type() == QEvent::KeyPress) { QKeyEvent * e = (QKeyEvent *) event; if (e->modifiers() & Qt::ControlModifier) { scrollArea->widget()->setCursor(*resizeCursor); if ((e->key() == Qt::Key_Plus)||(e->key() == Qt::Key_Equal)) scaleImage(1.05); else if (e->key() == Qt::Key_Minus) scaleImage(0.95); } else { scrollArea->widget()->setCursor(QCursor(Qt::ArrowCursor)); } } else if (event->type() == QEvent::KeyRelease) { scrollArea->widget()->setCursor(QCursor(Qt::ArrowCursor)); } else if (event->type() == QEvent::Wheel) { QWheelEvent * e = (QWheelEvent *) event; if (e->modifiers() & Qt::ControlModifier) { scrollArea->widget()->setFocus(); scrollArea->widget()->setCursor(*resizeCursor); if (e->delta() > 0) scaleImage(1.05); else scaleImage(0.95); return true; } } } else */ if (object == textEdit) { if (event->type() == QEvent::KeyPress) { QKeyEvent *e = (QKeyEvent *) event; if (e->modifiers() & Qt::ControlModifier) { if ((e->key() == Qt::Key_Plus) || (e->key() == Qt::Key_Equal)) { enlargeFont(); return true; } else if (e->key() == Qt::Key_Minus) { decreaseFont(); return true; } } } else if (event->type() == QEvent::Wheel) { QWheelEvent *e = (QWheelEvent *) event; if (e->modifiers() & Qt::ControlModifier) { if (e->delta() > 0) enlargeFont(); else decreaseFont(); return true; } } } return QMainWindow::eventFilter(object, event); }
/* Given a specification for a document and a view, this function will run the single-edit tests for that document/view. The document is represented by a descriptor array in which each descriptor is a paragraph. The view is represented simply by the TInt aTopOfBand argument, which tells us how many paragraphs to lose from the top of the band. So if it is zero, then we just initialise the doc and don't scroll at all; if it is 1 we scroll down until 1 paragraph is removed from the top of the band, and so on. Currently it's basically only ever set to 1 or 0, and is thus used as a boolean "top_of_doc!=top_of_band" So, given the document/view. the function will retrieve the list of useful positions to test, and then test: - increasing font size - deleting - inserting text - inserting various other things ...making use of various helper functions to do so */ void RunSingleEditTestsOnDocumentL(CRichText& aRichText, CBandMaintainer& aMaintainer, CBandValidator& aValidator, const MDesCArray& aTextContents, TInt aTopOfBand) { TDocumentSpec docSpec(aTextContents, aTopOfBand); docSpec.SetupDocumentL(aRichText, aMaintainer); RArray<TInt> positions; CleanupClosePushL(positions); RArray<TTmLineInfo> lines; CleanupClosePushL(lines); if(KSelectEditPointsFromWholeBand) { GetLinesInBandL(aMaintainer.TmLayoutUnderTest(), lines); } else { GetVisibleLinesL(aMaintainer.LayoutUnderTest(), lines); } PositionsToTestL(lines, positions); output->WriteDocumentAttributesL(aMaintainer.ViewUnderTest()); output->WriteDocumentPositionsL(positions); test.Start(_L("Reformatting: change font")); TReformatText changeFont(aMaintainer, aRichText, aValidator, EChangeFont, testEnv->Device()); ExecuteTestL(aRichText, aMaintainer, changeFont, docSpec, positions); test.Next(_L("Reformatting: decrease font")); TReformatText decreaseFont(aMaintainer, aRichText, aValidator, EDecreaseFontSize, testEnv->Device()); ExecuteTestL(aRichText, aMaintainer, decreaseFont, docSpec, positions); test.Next(_L("Reformatting: make bold")); TReformatText makeBold(aMaintainer, aRichText, aValidator, EMakeBold, testEnv->Device()); ExecuteTestL(aRichText, aMaintainer, makeBold, docSpec, positions); test.Next(_L("Reformatting: increase font")); TReformatText increaseFont(aMaintainer, aRichText, aValidator, EIncreaseFontSize, testEnv->Device()); ExecuteTestL(aRichText, aMaintainer, increaseFont, docSpec, positions); test.Next(_L("Deleting")); TDeleteText deleteText(aMaintainer, aRichText, aValidator); ExecuteTestL(aRichText, aMaintainer, deleteText, docSpec, positions); test.Next(_L("Inserting a space")); InsertTextL(aRichText, aMaintainer, aValidator, docSpec, KSpace, positions); test.Next(_L("Inserting several spaces")); InsertTextL(aRichText, aMaintainer, aValidator, docSpec, KSpaces, positions); test.Next(_L("Inserting less than a line of text")); InsertTextL(aRichText, aMaintainer, aValidator, docSpec, KEnglishLessThanALine_1, positions); test.Next(_L("Inserting multi-line text")); InsertTextL(aRichText, aMaintainer, aValidator, docSpec, KEnglishMoreThanALine_1, positions); test.Next(_L("Inserting RLO marker")); InsertTextL(aRichText, aMaintainer, aValidator, docSpec, KRLO, positions); test.Next(_L("Inserting paragraph delimiter")); InsertTextL(aRichText, aMaintainer, aValidator, docSpec, KParagraphDelimiter, positions); test.End(); CleanupStack::PopAndDestroy(2); }
void AppEditMenu::setupMenu(QMenu *editMenu, QToolBar *toolbar) { toolbar->addSeparator(); editUndoAction=editMenu->addAction(IconUtil::getIcon("undo"), tr("&Undo"), this, SLOT(undo()), QKeySequence(QKeySequence::Undo)); editUndoAction->setStatusTip(tr("Undo last edit action")); toolbar->addAction(editUndoAction); editRedoAction=editMenu->addAction(IconUtil::getIcon("redo"), tr("&Redo"), this, SLOT(redo()), QKeySequence(QKeySequence::Redo)); editRedoAction->setStatusTip(tr("Redo last undone edit action")); toolbar->addAction(editRedoAction); editMenu->addSeparator(); toolbar->addSeparator(); editCutAction=editMenu->addAction(IconUtil::getIcon("editcut"), tr("Cu&t"), this, SLOT(cut()), QKeySequence(QKeySequence::Cut)); editCutAction->setStatusTip(tr("Cut")); toolbar->addAction(editCutAction); editCopyAction=editMenu->addAction(IconUtil::getIcon("editcopy"), tr("&Copy"), this, SLOT(copy()), QKeySequence(QKeySequence::Copy)); editCopyAction->setStatusTip(tr("Copy")); toolbar->addAction(editCopyAction); //editCopyAsAction=editMenu->addAction(IconUtil::getIcon("editcopy"), tr("Copy as")); //editCopyAsAction->setMenu(createCopyAsMenu(editMenu)); editPasteAction=editMenu->addAction(IconUtil::getIcon("editpaste"), tr("&Paste"), this, SLOT(paste()), QKeySequence(QKeySequence::Paste)); editPasteAction->setStatusTip(tr("Paste")); toolbar->addAction(editPasteAction); editMenu->addSeparator(); editSelectAllAction=editMenu->addAction(IconUtil::getIcon("editselectall"), tr("Select &All"), this, SLOT(selectAll()), QKeySequence(QKeySequence::SelectAll)); editSelectAllAction->setStatusTip(tr("Select All")); editMenu->addSeparator(); toolbar->addSeparator(); editAdvancedAction = editMenu->addAction(tr("Advanced")); createEditAdvancedMenu(toolbar); editAdvancedAction->setMenu(editAdvancedMenu); editMenu->addSeparator(); editDescribeAction=editMenu->addAction(tr("Describe object"), this, SLOT(describeObject()), QKeySequence("F4")); editResolveAction=editMenu->addAction(tr("Object Menu")); createEditResolveMenu(); editResolveAction->setMenu(editResolveMenu); editMenu->addSeparator(); //toolbar->addSeparator(); editIncreaseFontSize=editMenu->addAction(tr("Increase font size"), this, SLOT(increaseFont()), QKeySequence(QKeySequence::ZoomIn)); editIncreaseFontSize->setStatusTip(tr("Increase font size")); editDecreaseFontSize=editMenu->addAction(tr("Decrease font size"), this, SLOT(decreaseFont()), QKeySequence(QKeySequence::ZoomOut)); editDecreaseFontSize->setStatusTip(tr("Decrease font size")); editResetFontSize=editMenu->addAction(tr("Reset font size"), this, SLOT(resetFont()), QKeySequence(tr("Ctrl+0", "Edit|Reset font size"))); editResetFontSize->setStatusTip(tr("Reset font size")); editMenu->addSeparator(); toolbar->addSeparator(); editFindAction=editMenu->addAction(IconUtil::getIcon("find"), tr("&Find..."), this, SLOT(showSearchWidget()), QKeySequence("Ctrl+F")); editFindAction->setStatusTip(tr("Find text")); toolbar->addAction(editFindAction); editFindPreviousAction=editMenu->addAction(IconUtil::getIcon("find_prev"), tr("Find p&revious"), this, SLOT(findPrevious()), QKeySequence("Shift+F3")); editFindPreviousAction->setStatusTip(tr("Find previous occurence of current search text")); toolbar->addAction(editFindPreviousAction); editFindNextAction=editMenu->addAction(IconUtil::getIcon("find_next"), tr("Find &next"), this, SLOT(findNext()), QKeySequence("F3")); editFindNextAction->setStatusTip(tr("Find next occurence of current search text")); toolbar->addAction(editFindNextAction); editMenu->addSeparator(); editGoToLineAction=editMenu->addAction(IconUtil::getIcon("goto_line"), tr("&Go to line..."), this, SLOT(goToLine()), QKeySequence("Ctrl+G")); editGoToLineAction->setStatusTip(tr("Go to line")); connect(editResolveMenu, SIGNAL(aboutToShow()), this, SLOT(populateResolveMenu())); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { // open database connection db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("/Users/jdoud/dev/brainstorm.sqlite"); if(!db.open()) { qDebug() << db.lastError(); qFatal("Failed to connect."); } // setup UI ui->setupUi(this); ui->toolBar->addWidget(ui->comboFonts); ui->toolBar->addWidget(ui->comboFontSizes); ui->toolBar->addWidget(ui->comboColors); // set text editor defaults ui->textNote->document()->setIndentWidth(20); ui->textNote->setTabStopWidth(20); ui->textNote->setTabChangesFocus(false); ui->actionIncrease_Indent->setShortcut(Qt::Key_Tab); ui->actionDecrease_Indent->setShortcut(Qt::Key_Backtab); // setup comboColors QPixmap pix(16, 16); pix.fill(Qt::white); ui->comboColors->addItem(pix, ""); pix.fill(Qt::black); ui->comboColors->addItem(pix, ""); pix.fill(Qt::red); ui->comboColors->addItem(pix, ""); pix.fill(Qt::blue); ui->comboColors->addItem(pix, ""); pix.fill(Qt::darkGreen); ui->comboColors->addItem(pix, ""); pix.fill(Qt::gray); ui->comboColors->addItem(pix, ""); // create system tray icon createActions(); createTrayIcon(); // create models categoriesModel = new QSqlTableModel(); categoriesModel->setTable("categories"); categoriesModel->setSort(1, Qt::AscendingOrder); categoriesModel->select(); ui->listCategories->setModel(categoriesModel); ui->listCategories->setModelColumn(1); notesModel = new QSqlTableModel(); notesModel->setTable("notes"); ui->listNotes->setModel(notesModel); ui->listNotes->setModelColumn(2); // set splitter size QList<int> sizes; sizes << 230 << 150; ui->splitterLists->setSizes(sizes); sizes.clear(); sizes << 230 << 600; ui->splitterNote->setSizes(sizes); // connect File menu slots connect(ui->actionNew_Category, SIGNAL(triggered()), this, SLOT(newCategory())); connect(ui->actionRename_Category, SIGNAL(triggered()), this, SLOT(renameCategory())); connect(ui->actionDelete_Category, SIGNAL(triggered()), this, SLOT(deleteCategory())); connect(ui->actionNew_Note, SIGNAL(triggered()), this, SLOT(newNote())); connect(ui->actionRename_Note, SIGNAL(triggered()), this, SLOT(renameNote())); connect(ui->actionSave_Note, SIGNAL(triggered()), this, SLOT(saveNote())); connect(ui->actionDelete_Note, SIGNAL(triggered()), this, SLOT(deleteNote())); connect(ui->actionQuit, SIGNAL(triggered()), this, SLOT(quit())); // connect Edit menu slots connect(ui->actionFind_Replace, SIGNAL(triggered()), this, SLOT(findAndReplace())); // connect Format menu slots connect(ui->actionBold, SIGNAL(triggered()), this, SLOT(bold())); connect(ui->actionItalic, SIGNAL(triggered()), this, SLOT(italic())); connect(ui->actionUnderline, SIGNAL(triggered()), this, SLOT(underline())); connect(ui->actionStrikethrough, SIGNAL(triggered()), this, SLOT(strikethrough())); connect(ui->actionBullet_List, SIGNAL(triggered()), this, SLOT(bulletList())); connect(ui->actionNumber_List, SIGNAL(triggered()), this, SLOT(numberList())); connect(ui->actionIncrease_Indent, SIGNAL(triggered()), this, SLOT(increaseIndent())); connect(ui->actionDecrease_Indent, SIGNAL(triggered()), this, SLOT(decreaseIndent())); connect(ui->actionShow_Colors, SIGNAL(triggered()), this, SLOT(showColors())); connect(ui->actionShow_Fonts, SIGNAL(triggered()), this, SLOT(showFonts())); connect(ui->actionIncrease_Font, SIGNAL(triggered()), this, SLOT(increaseFont())); connect(ui->actionDecrease_Font, SIGNAL(triggered()), this, SLOT(decreaseFont())); connect(ui->actionReset_Font, SIGNAL(triggered()), this, SLOT(resetFont())); connect(ui->actionAlign_Left, SIGNAL(triggered()), this, SLOT(alignLeft())); connect(ui->actionAlign_Center, SIGNAL(triggered()), this, SLOT(alignCenter())); connect(ui->actionAlign_Right, SIGNAL(triggered()), this, SLOT(alignRight())); connect(ui->actionAlign_Justify, SIGNAL(triggered()), this, SLOT(alignJustify())); // connect View menu slots connect(ui->actionHide_Window, SIGNAL(triggered()), this, SLOT(hide())); connect(ui->actionPrevious_Category, SIGNAL(triggered()), this, SLOT(previousCategory())); connect(ui->actionNext_Category, SIGNAL(triggered()), this, SLOT(nextCategory())); connect(ui->actionPrevious_Note, SIGNAL(triggered()), this, SLOT(previousNote())); connect(ui->actionNext_Note, SIGNAL(triggered()), this, SLOT(nextNote())); // connect Help menu slots connect(ui->actionAbout_Brainstorm, SIGNAL(triggered()), this, SLOT(aboutBrainstorm())); connect(ui->actionAbout_Qt, SIGNAL(triggered()), this, SLOT(aboutQt())); // connect application slots connect(ui->textNote, SIGNAL(cursorPositionChanged()), this, SLOT(updateMenus())); connect(ui->textNote, SIGNAL(currentCharFormatChanged(QTextCharFormat)), this, SLOT(updateMenus())); connect(ui->comboFonts, SIGNAL(activated(QString)), this, SLOT(setFont(QString))); connect(ui->comboFontSizes, SIGNAL(activated(QString)), this, SLOT(setFontSize(QString))); connect(ui->comboColors, SIGNAL(activated(int)), this, SLOT(setFontColor(int))); // connect category list slots connect(ui->listCategories->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(updateNoteList(QModelIndex))); // connect note list slots connect(ui->listNotes->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(updateNoteText(QModelIndex))); // connect text slots ui->textNote->installEventFilter((this)); // connect system tray icon connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(iconActivated(QSystemTrayIcon::ActivationReason))); // initialize default data ui->listCategories->selectionModel()->setCurrentIndex(categoriesModel->index(0, 1), QItemSelectionModel::SelectCurrent); }