void CTextInput::keyPressed( const SDL_KeyboardEvent & key ) { if(!focus || key.state != SDL_PRESSED) return; if(key.keysym.sym == SDLK_TAB) { moveFocus(); GH.breakEventHandling(); return; } std::string oldText = text; switch(key.keysym.sym) { case SDLK_BACKSPACE: if(!text.empty()) text.resize(text.size()-1); break; default: if (key.keysym.unicode < ' ') return; else text += key.keysym.unicode; //TODO 16-/>8 break; } filters(text, oldText); if (text != oldText) { redraw(); cb(text); } }
void EventEngine::run(Control &c) { for (bool redraw = true;;) { if (redraw) { _graphics.resetColors(); _graphics.clearScreen(); _graphics.setCursorVisibility(false); for (size_t p = 0; p < 3; p++) { c.draw(_graphics, 0, 0, p); } redraw = false; Control * focused = Control::getFocus(); if (dynamic_cast<TextBox *>(focused) != NULL) { static_cast<TextBox *>(focused)->moveCurser(_graphics); } } INPUT_RECORD record; DWORD count; ReadConsoleInput(_console, &record, 1, &count); switch (record.EventType) { case KEY_EVENT: { auto f = Control::getFocus(); if (f != nullptr && record.Event.KeyEvent.bKeyDown) { auto code = record.Event.KeyEvent.wVirtualKeyCode; auto chr = record.Event.KeyEvent.uChar.AsciiChar; if (code == VK_TAB) { if (!Panel::getMsgOpen()){ moveFocus(c, f); } } else f->keyDown(code, chr); redraw = true; } break; } case MOUSE_EVENT: { auto button = record.Event.MouseEvent.dwButtonState; auto coord = record.Event.MouseEvent.dwMousePosition; auto x = coord.X; auto y = coord.Y; if (button == FROM_LEFT_1ST_BUTTON_PRESSED || button == RIGHTMOST_BUTTON_PRESSED) { c.mousePressed(x, y, button == FROM_LEFT_1ST_BUTTON_PRESSED); redraw = true; } break; } default: break; } } }
void EventEngine::run(Control &c) { for (bool redraw = true;;) { if (redraw) { _graphics.clearScreen(); _graphics.setCursorVisibility(false); for (size_t p = 0; p < 6; ++p) c.draw(_graphics, 0, 0, p); redraw = false; Control::getFocus()->nowInFocus(); } INPUT_RECORD record; DWORD count; ReadConsoleInput(_console, &record, 1, &count); switch (record.EventType) { case KEY_EVENT: { auto f = Control::getFocus(); if ((f != nullptr) && (record.Event.KeyEvent.bKeyDown)) { auto code = record.Event.KeyEvent.wVirtualKeyCode; auto chr = record.Event.KeyEvent.uChar.AsciiChar; if (code == VK_TAB) moveFocus(c, f); else { f->keyDown(code, chr); } redraw = true; } break; } case MOUSE_EVENT: { auto button = record.Event.MouseEvent.dwButtonState; auto coord = record.Event.MouseEvent.dwMousePosition; auto x = coord.X - c.getLeft(); auto y = coord.Y - c.getTop(); if (button == FROM_LEFT_1ST_BUTTON_PRESSED || button == RIGHTMOST_BUTTON_PRESSED) { c.mousePressed(x, y, button == FROM_LEFT_1ST_BUTTON_PRESSED); redraw = true; } break; } default: break; } } }
/** * Constructor of CommandManager. * * @param parent parent widget */ CommandManager::CommandManager(QWidget *parent) : QMenuBar(parent) { actionMenu = new QPopupMenuExt(parent); goMenu = new QPopupMenuExt(parent); helpMenu = new QPopupMenuExt(parent); // Listen on menu item selection connect(actionMenu, SIGNAL(activated(int)), SLOT(commandActivated(int))); connect(goMenu, SIGNAL(activated(int)), SLOT(commandActivated(int))); connect(helpMenu, SIGNAL(activated(int)), SLOT(commandActivated(int))); #ifndef QT_NO_ACCEL QAccel* focusAccel = new QAccel(this, "focus-change accelerator"); focusAccel->connectItem(focusAccel->insertItem(MOVE_FOCUS, 0), this, SLOT(moveFocus())); #endif }
bool PasswordDialog::eventFilter(QObject *obj, QEvent *event) { QWidget *wnd = 0; if (event->type() == QEvent::KeyRelease) { QKeyEvent *key_event = static_cast<QKeyEvent *>(event); if (obj == &text_edit_) { if (key_event->key() == Qt::Key_Down) { show_plain_text_.setFocus(); return true; } else if (key_event->key() == Qt::Key_Right && ok_button_.isEnabled()) { ok_button_.setFocus(); return true; } } else if (obj == &ok_button_) { if (key_event->key() == Qt::Key_Right) { clear_button_.setFocus(); return true; } else if (key_event->key() == Qt::Key_Down) { show_plain_text_.setFocus(); return true; } else if (key_event->key() == Qt::Key_Left) { text_edit_.setFocus(); return true; } } else if (obj == &clear_button_) { if (key_event->key() == Qt::Key_Down) { show_plain_text_.setFocus(); return true; } else if (key_event->key() == Qt::Key_Left) { text_edit_.setFocus(); return true; } } else if (obj == &keyboard_ || obj == &show_plain_text_) { if (key_event->key() == Qt::Key_Down || key_event->key() == Qt::Key_Up || key_event->key() == Qt::Key_Left || key_event->key() == Qt::Key_Right) { wnd = moveFocus(this, key_event->key()); if (wnd) { wnd->setFocus(); } return true; } } } // standard event processing return QObject::eventFilter(obj, event); }
bool UIWindow::display(int offsetX, int offsetY) { // go exclusive if (_mode == WINDOW_EXCLUSIVE || _mode == WINDOW_SYSTEM_EXCLUSIVE) { if (!_shieldWindow) { _shieldWindow = new UIWindow(_gameRef); } if (_shieldWindow) { _shieldWindow->_posX = _shieldWindow->_posY = 0; _shieldWindow->_width = _gameRef->_renderer->getWidth(); _shieldWindow->_height = _gameRef->_renderer->getHeight(); _shieldWindow->display(); } } else if (_isMenu) { if (!_shieldButton) { _shieldButton = new UIButton(_gameRef); _shieldButton->setName("close"); _shieldButton->setListener(this, _shieldButton, 0); _shieldButton->_parent = this; } if (_shieldButton) { _shieldButton->_posX = _shieldButton->_posY = 0; _shieldButton->setWidth(_gameRef->_renderer->getWidth()); _shieldButton->setHeight(_gameRef->_renderer->getHeight()); _shieldButton->display(); } } if (!_visible) { return STATUS_OK; } if (_fadeBackground) { Graphics::PixelFormat format = _gameRef->_renderer->getPixelFormat(); byte fadeR, fadeG, fadeB, fadeA; // First convert from the internal format to the screen-format uint32 fadeColor = format.ARGBToColor(RGBCOLGetA(_fadeColor), RGBCOLGetR(_fadeColor), RGBCOLGetG(_fadeColor), RGBCOLGetB(_fadeColor)); // Then get components format.colorToARGB(fadeColor, fadeA, fadeR, fadeG, fadeB); _gameRef->_renderer->fadeToColor(fadeR, fadeG, fadeB, fadeA); } if (_dragging) { _posX += (_gameRef->_mousePos.x - _dragFrom.x); _posY += (_gameRef->_mousePos.y - _dragFrom.y); _dragFrom.x = _gameRef->_mousePos.x; _dragFrom.y = _gameRef->_mousePos.y; } if (!_focusedWidget || (!_focusedWidget->canFocus() || _focusedWidget->isDisabled() || !_focusedWidget->isVisible())) { moveFocus(); } bool popViewport = false; if (_clipContents) { if (!_viewport) { _viewport = new BaseViewport(_gameRef); } if (_viewport) { _viewport->setRect(_posX + offsetX, _posY + offsetY, _posX + _width + offsetX, _posY + _height + offsetY); _gameRef->pushViewport(_viewport); popViewport = true; } } UITiledImage *back = _back; BaseSprite *image = _image; BaseFont *font = _font; if (!isFocused()) { if (_backInactive) { back = _backInactive; } if (_imageInactive) { image = _imageInactive; } if (_fontInactive) { font = _fontInactive; } } if (_alphaColor != 0) { _gameRef->_renderer->_forceAlphaColor = _alphaColor; } if (back) { back->display(_posX + offsetX, _posY + offsetY, _width, _height); } if (image) { image->draw(_posX + offsetX, _posY + offsetY, _transparent ? nullptr : this); } if (!BasePlatform::isRectEmpty(&_titleRect) && font && _text) { font->drawText((byte *)_text, _posX + offsetX + _titleRect.left, _posY + offsetY + _titleRect.top, _titleRect.right - _titleRect.left, _titleAlign, _titleRect.bottom - _titleRect.top); } if (!_transparent && !image) { _gameRef->_renderer->addRectToList(new BaseActiveRect(_gameRef, this, nullptr, _posX + offsetX, _posY + offsetY, _width, _height, 100, 100, false)); } for (uint32 i = 0; i < _widgets.size(); i++) { _widgets[i]->display(_posX + offsetX, _posY + offsetY); } if (_alphaColor != 0) { _gameRef->_renderer->_forceAlphaColor = 0; } if (popViewport) { _gameRef->popViewport(); } return STATUS_OK; }
KJotsMain::KJotsMain(const char* name) : KTopLevelWidget( name ) { //create widgets f_main = new QFrame( this, "Frame_0" ); f_main->move(0, 28); f_main->setMinimumSize( 500, 180 ); f_main->setFrameStyle( 0 ); f_text = new QFrame( f_main, "Frame_1" ); f_text->setGeometry( 8, 72, 452, 45 ); f_text->setFrameStyle( 50 ); f_labels = new QFrame( f_main, "Frame_2" ); f_labels->setMinimumSize( 436, 24 ); f_labels->setFrameStyle( 0 ); menubar = new KMenuBar( this, "MenuBar_1" ); // KMenubar is not a FRAME!!! (sven) //menubar->setFrameStyle( 34 ); //menubar->setLineWidth( 2 ); s_bar = new QScrollBar( f_main, "ScrollBar_1" ); s_bar->setMinimumSize( 452, 16 ); s_bar->setOrientation( QScrollBar::Horizontal ); me_text = new MyMultiEdit( f_text, "me_text" ); me_text->setMinimumSize( 436, 30 ); me_text->insertLine( "" ); l_folder = new QLabel( f_labels, "Label_4" ); l_folder->setMinimumSize( 68, 20 ); l_folder->setFrameStyle( QFrame::WinPanel | QFrame::Sunken ); l_folder->setText( "" ); le_subject = new QLineEdit( f_labels, "le_subject" ); le_subject->setMinimumSize( 56, 20 ); le_subject->setText( "" ); le_subject->setFocusPolicy(QWidget::ClickFocus); bg_top = new MyButtonGroup( f_main, "ButtonGroup_2" ); bg_top->setMinimumSize( 452, 32 ); bg_top->setFrameStyle( 49 ); bg_top->setTitle( "" ); bg_top->setAlignment( 1 ); bg_top->lower(); this->setMinimumSize(500, 211); KConfig *config = KApplication::getKApplication()->getConfig(); config->setGroup("kjots"); entrylist.setAutoDelete(TRUE); button_list.setAutoDelete(TRUE); folderOpen = FALSE; entrylist.append(new TextEntry); confdiag = NULL; subj_list = new SubjList; connect( this, SIGNAL(folderChanged(QList<TextEntry> *)), subj_list, SLOT(rebuildList( QList<TextEntry> *)) ); connect( this, SIGNAL(entryMoved(int)), subj_list, SLOT( select(int)) ); connect( subj_list, SIGNAL(entryMoved(int)), this, SLOT( barMoved(int)) ); connect( le_subject, SIGNAL(textChanged(const char *)), subj_list, SLOT(entryChanged(const char*)) ); me_text->setEnabled(FALSE); le_subject->setEnabled(FALSE); current = 0; connect( s_bar, SIGNAL(valueChanged(int)), this, SLOT(barMoved(int)) ); top2bottom = new QGridLayout( f_main, 4, 1, 4 ); top2bottom->addWidget( f_text, 0, 0, AlignCenter ); top2bottom->setRowStretch( 0, 1 ); top2bottom->addWidget( s_bar, 1, 0, AlignCenter ); top2bottom->addWidget( bg_top, 2, 0, AlignCenter ); top2bottom->addWidget( f_labels, 3, 0, AlignCenter ); top2bottom->activate(); labels_layout = new QGridLayout( f_labels, 1, 2, 0 ); labels_layout->addWidget( l_folder, 0, 0, AlignVCenter | AlignLeft ); labels_layout->addWidget( le_subject, 0, 1, AlignVCenter | AlignLeft ); labels_layout->setColStretch( 1, 1 ); labels_layout->activate(); QFont font_label(l_folder->fontInfo().family()); font_label.setBold(TRUE); l_folder->setFont(font_label); f_text_layout = new QGridLayout( f_text, 2, 1, 4 ); f_text_layout->addWidget( me_text, 0, 0, AlignCenter ); f_text_layout->setRowStretch( 0, 1 ); f_text_layout->activate(); s_bar->setRange(0,0); s_bar->setValue(0); s_bar->setSteps(1,1); bg_top->setExclusive(TRUE); me_text->setFocusPolicy(QWidget::StrongFocus); // read hotlist config->readListEntry( "Hotlist", hotlist ); while( hotlist.count() > HOT_LIST_SIZE ) hotlist.removeLast(); // read list of folders config->readListEntry( "Folders", folder_list ); QString temp; folders = new QPopupMenu; int i = 0; QPushButton *temp_button; for( temp = folder_list.first(); !temp.isEmpty(); temp = folder_list.next(), i++ ) { folders->insertItem(temp, i); if( hotlist.contains(temp) ) { temp_button = new QPushButton(temp, bg_top); temp_button->setFocusPolicy(QWidget::ClickFocus); temp_button->setToggleButton(TRUE); temp_button->setFixedSize(BUTTON_WIDTH,24); bg_top->insert(temp_button, i); button_list.append(temp_button); } } unique_id = i+1; connect( folders, SIGNAL(activated(int)), this, SLOT(openFolder(int)) ); connect( bg_top, SIGNAL(clicked(int)), this, SLOT(openFolder(int)) ); updateConfiguration(); // creat keyboard shortcuts // CTRL+Key_J := previous page // CTRL+Key_K := next page // CTRL+Key_L := show subject list // CTRL+Key_A := add new page // CTRL+Key_M := move focus keys = new KAccel( this ); keys->insertStdItem( KAccel::New, klocale->translate("New Book") ); keys->connectItem( KAccel::New, this, SLOT(createFolder()) ); keys->connectItem( KAccel::Save , this, SLOT(saveFolder()) ); keys->connectItem( KAccel::Quit, qApp, SLOT(quit()) ); keys->connectItem( KAccel::Cut , me_text, SLOT(cut()) ); keys->connectItem( KAccel::Copy , me_text, SLOT(copyText()) ); keys->connectItem( KAccel::Paste , me_text, SLOT(paste()) ); keys->insertItem(i18n("PreviousPage"), "PreviousPage", CTRL+Key_J); keys->insertItem(i18n("NextPage"), "NextPage", CTRL+Key_K); keys->insertItem(i18n("ShowSubjectList"), "ShowSubjectList", CTRL+Key_L); keys->insertItem(i18n("AddNewPage"), "AddNewPage", CTRL+Key_A); keys->insertItem(i18n("MoveFocus"), "MoveFocus", CTRL+Key_M); keys->insertItem(i18n("CopySelection"), "CopySelection", CTRL+Key_Y); keys->connectItem( "PreviousPage", this, SLOT(prevEntry()) ); keys->connectItem( "NextPage", this, SLOT(nextEntry()) ); keys->connectItem( "ShowSubjectList", this, SLOT(toggleSubjList()) ); keys->connectItem( "AddNewPage", this, SLOT(newEntry()) ); keys->connectItem( "MoveFocus", this, SLOT(moveFocus()) ); keys->connectItem( "CopySelection", this, SLOT(copySelection()) ); keys->readSettings(); // create menu int id; QPopupMenu *file = new QPopupMenu; id = file->insertItem(klocale->translate("&New Book"), this, SLOT(createFolder())); keys->changeMenuAccel(file, id, KAccel::New); file->insertSeparator(); id = file->insertItem(klocale->translate("Save current book"), this, SLOT(saveFolder()) ); keys->changeMenuAccel(file, id, KAccel::Save); id = file->insertItem(klocale->translate("Save book to ascii file"), this, SLOT(writeBook()) ); id = file->insertItem(klocale->translate("Save page to ascii file"), this, SLOT(writePage()) ); file->insertSeparator(); id = file->insertItem(klocale->translate("Delete current book"), this, SLOT(deleteFolder()) ); file->insertSeparator(); id = file->insertItem(klocale->translate("&Quit"), qApp, SLOT( quit() )); keys->changeMenuAccel(file, id, KAccel::Quit); QPopupMenu *edit_menu = new QPopupMenu; id = edit_menu->insertItem(klocale->translate("C&ut"),me_text, SLOT(cut())); keys->changeMenuAccel(edit_menu, id, KAccel::Cut); id = edit_menu->insertItem(klocale->translate("&Copy") , me_text, SLOT(copyText()) ); keys->changeMenuAccel(edit_menu, id, KAccel::Copy); id = edit_menu->insertItem(klocale->translate("&Paste"), me_text, SLOT(paste())); keys->changeMenuAccel(edit_menu, id, KAccel::Paste); edit_menu->insertSeparator(); id = edit_menu->insertItem(klocale->translate("&New Page"), this, SLOT(newEntry()) ); keys->changeMenuAccel(edit_menu, id, "AddNewPage"); id = edit_menu->insertItem(klocale->translate("&Delete Page"), this, SLOT(deleteEntry()) ); QPopupMenu *options = new QPopupMenu; options->insertItem(klocale->translate("&Config"), this, SLOT(configure()) ); options->insertItem(klocale->translate("Configure &Keys"), this, SLOT(configureKeys()) ); QPopupMenu *hotlist = new QPopupMenu; hotlist->insertItem(klocale->translate("Add current book to hotlist"), this, SLOT(addToHotlist()) ); hotlist->insertItem(klocale->translate("Remove current book from hotlist"), this, SLOT(removeFromHotlist()) ); menubar->insertItem( klocale->translate("&File"), file ); menubar->insertItem( klocale->translate("&Edit"), edit_menu ); menubar->insertItem( klocale->translate("Hot&list"), hotlist ); menubar->insertItem( klocale->translate("&Options"), options ); menubar->insertItem( klocale->translate("&Books"), folders ); menubar->insertSeparator(); QString about = "KJots 0.3.1\n\r(C) "; about += (QString) klocale->translate("by") + " Christoph Neerfeld\n\[email protected]"; menubar->insertItem( klocale->translate("&Help"), KApplication::getKApplication()->getHelpMenu(TRUE, about ) ); config->setGroup("kjots"); // create toolbar toolbar = new KToolBar(this); QPixmap temp_pix; temp_pix = global_pix_loader->loadIcon("filenew.xpm"); toolbar->insertButton(temp_pix, 0, SIGNAL(clicked()), this, SLOT(newEntry()), TRUE, i18n("New")); temp_pix = global_pix_loader->loadIcon("filedel.xpm"); toolbar->insertButton(temp_pix, 1, SIGNAL(clicked()), this, SLOT(deleteEntry()), TRUE, i18n("Delete")); temp_pix = global_pix_loader->loadIcon("back.xpm"); toolbar->insertButton(temp_pix, 2, SIGNAL(clicked()), this, SLOT(prevEntry()), TRUE, i18n("Previous")); temp_pix = global_pix_loader->loadIcon("forward.xpm"); toolbar->insertButton(temp_pix, 3, SIGNAL(clicked()), this, SLOT(nextEntry()), TRUE, i18n("Next")); toolbar->insertSeparator(); temp_pix = global_pix_loader->loadIcon("openbook.xpm"); toolbar->insertButton(temp_pix, 4, SIGNAL(clicked()), this, SLOT(toggleSubjList()), TRUE, i18n("Subject List")); toolbar->insertSeparator(); temp_pix = global_pix_loader->loadIcon("exit.xpm"); toolbar->setBarPos( (KToolBar::BarPosition) config->readNumEntry("ToolBarPos") ); addToolBar(toolbar); setView(f_main, FALSE); setMenu(menubar); enableToolBar(KToolBar::Show); QString last_folder = config->readEntry("LastOpenFolder"); int nr; if( (nr = folder_list.find(last_folder)) >= 0 ) openFolder(nr); int width, height; width = config->readNumEntry("Width"); height = config->readNumEntry("Height"); if( width < minimumSize().width() ) width = minimumSize().width(); if( height < minimumSize().height() ) height = minimumSize().height(); resize(width, height); }
void GameFrame::keyPressEvent(QKeyEvent *event) { int key = event->key(); if (key == Qt::Key_Control && notesEnabled) { takingNotes = !takingNotes; if (takingNotes) { emit toggleTakingNotes("Input mode: NOTE"); } else { emit toggleTakingNotes("Input mode: NORMAL"); } return; } if (focused == -1 || gameOver) { return; } if (key == Qt::Key_Right || key == Qt::Key_Left || key == Qt::Key_Down || key == Qt::Key_Up) { int old_focus = focused; int row = focused / 9; int col = focused % 9; switch (key) { case Qt::Key_Right: col = moveFocus(1, false); break; case Qt::Key_Left: col = moveFocus(-1, false); break; case Qt::Key_Up: row = moveFocus(-1, true); break; case Qt::Key_Down: row = moveFocus(1, true); break; } focused = row * 9 + col; if (focused != old_focus && mode == COOP) { emit sendFocusedSquare(focused); } } else { if (key == Qt::Key_0 || key == Qt::Key_Backspace || key == Qt::Key_Delete) { if (!takingNotes || !notesEnabled) { setAt(focused, 0, true); } else { notes[focused].clear(); if (mode == COOP) { emit sendNotes(focused, notes[focused]); } } } else if (key == Qt::Key_Escape) { focused = -1; } else { auto check = key_map.find(key); if (check != key_map.end()) { if (!takingNotes || !notesEnabled) { setAt(focused, check->second, true); } else { if (getAt(focused) > 0) { return; } std::vector<int> ¬es_pos = notes[focused]; auto iterator = std::find(notes_pos.begin(), notes_pos.end(), check->second); if (iterator == notes_pos.end()) { notes_pos.push_back(check->second); std::sort(notes_pos.begin(), notes_pos.end()); } else { notes_pos.erase(iterator); } if (mode == COOP) { emit sendNotes(focused, notes_pos); } } } } } repaint(); }