📄 editor.cpp
字号:
#include <stdlib.h> #include <kapp.h>#include <qdir.h>#include <qpixmap.h>#include <qimage.h>#include <qlayout.h>#include <qfiledlg.h>#include <qpainter.h>#include "Editor.h"#include "Editor.moc"#include "Preferences.h"#include <kmessagebox.h>#include<kglobal.h>#include<kconfig.h> // Needed to use KConfig#include<klocale.h> // Needed to use KLocale#include<kiconloader.h> //#include <ktoolbarradiogroup.h>#define ID_TOOL_NEW 100#define ID_TOOL_LOAD 101#define ID_TOOL_SAVE 102#define ID_TOOL_ADD 103#define ID_TOOL_DEL 104#define ID_TOOL_MOVE 105#define ID_TOOL_SELECT 106#define ID_TOOL_CUT 107#define ID_TOOL_COPY 108#define ID_TOOL_PASTE 109#define ID_TOOL_LEFT 110#define ID_TOOL_RIGHT 111#define ID_TOOL_UP 112#define ID_TOOL_DOWN 113#define ID_TOOL_STATUS 199 #define ID_META_EXIT 201// When we assign a tile to draw in a slot we do it in order from te following// table, wrapping on the tile number. It makes the tile layout look more// random.Editor::Editor( QWidget* parent, const char* name) : QDialog( parent, name, TRUE, 0 ), tiles(false){ int sWidth = (BoardLayout::width+2)*(tiles.qWidth()); int sHeight =( BoardLayout::height+2)*tiles.qHeight(); sWidth += 4*tiles.shadowSize(); drawFrame = new FrameImage( this, "drawFrame" ); drawFrame->setGeometry( 10, 40 ,sWidth ,sHeight); drawFrame->setMinimumSize( 0, 0 ); drawFrame->setMaximumSize( 32767, 32767 ); drawFrame->setFocusPolicy( QWidget::NoFocus ); drawFrame->setBackgroundMode( QWidget::PaletteBackground ); drawFrame->setFontPropagation( QWidget::NoChildren ); drawFrame->setPalettePropagation( QWidget::NoChildren ); drawFrame->setFrameStyle( 49 ); drawFrame->setMouseTracking(true); // setup the tool bar setupToolbar(); QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(topToolbar,0); layout->addWidget(drawFrame,1); layout->activate(); resize( sWidth+60, sHeight+60); setMinimumSize( sWidth+60, sHeight+60); setMaximumSize( sWidth+60, sHeight+60); // load in the tile set tiles.loadTileset(preferences.tileset()); // tell the user what we do setCaption(kapp->makeStdCaption(i18n("Edit board layout"))); connect( drawFrame, SIGNAL(mousePressed(QMouseEvent *) ), SLOT(drawFrameMousePressEvent(QMouseEvent *))); connect( drawFrame, SIGNAL(mouseMoved(QMouseEvent *) ), SLOT(drawFrameMouseMovedEvent(QMouseEvent *))); clean= true; mode = insert; numTiles=0; statusChanged();}Editor::~Editor(){}// ---------------------------------------------------------void Editor::setupToolbar(){ KIconLoader *loader = KGlobal::iconLoader(); topToolbar = new KToolBar( this, "editToolBar" ); KToolBarRadioGroup *radio = new KToolBarRadioGroup(topToolbar); // new game topToolbar->insertButton(loader->loadIcon("filenew", KIcon::Toolbar), ID_TOOL_NEW, TRUE, i18n("New board.")); // open game topToolbar->insertButton(loader->loadIcon("fileopen", KIcon::Toolbar), ID_TOOL_LOAD, TRUE, i18n("Open board.")); // save game topToolbar->insertButton(loader->loadIcon("filesave", KIcon::Toolbar), ID_TOOL_SAVE, TRUE, i18n(" Save board."));#ifdef FUTURE_OPTIONS // Select topToolbar->insertSeparator(); topToolbar->insertButton(loader->loadIcon("rectangle_select", KIcon::Toolbar), ID_TOOL_SELECT, TRUE, i18n("Select.")); topToolbar->insertButton(loader->loadIcon("editcut", KIcon::Toolbar), ID_TOOL_CUT, TRUE, i18n("Cut.")); topToolbar->insertButton(loader->loadIcon("editcopy", KIcon::Toolbar), ID_TOOL_COPY, TRUE, i18n("Copy.")); topToolbar->insertButton(loader->loadIcon("editpaste", KIcon::Toolbar), ID_TOOL_PASTE, TRUE, i18n("Paste.")); topToolbar->insertSeparator(); topToolbar->insertButton(loader->loadIcon("move", KIcon::Toolbar), ID_TOOL_MOVE, TRUE, i18n("Move tiles."));#endif topToolbar->insertButton(loader->loadIcon("pencil", KIcon::Toolbar), ID_TOOL_ADD, TRUE, i18n("Add tiles.")); topToolbar->insertButton(loader->loadIcon("editdelete", KIcon::Toolbar), ID_TOOL_DEL, TRUE, i18n("Remove tiles.")); topToolbar->setToggle(ID_TOOL_ADD); topToolbar->setToggle(ID_TOOL_MOVE); topToolbar->setToggle(ID_TOOL_DEL); topToolbar->toggleButton(ID_TOOL_ADD); radio->addButton(ID_TOOL_ADD);#ifdef FUTURE_OPTIONS radio->addButton(ID_TOOL_MOVE);#endif radio->addButton(ID_TOOL_DEL); // board shift topToolbar->insertSeparator(); topToolbar->insertButton(loader->loadIcon("back", KIcon::Toolbar), ID_TOOL_LEFT, TRUE, i18n("Shift left.")); topToolbar->insertButton(loader->loadIcon("up", KIcon::Toolbar), ID_TOOL_UP, TRUE, i18n("Shift up.")); topToolbar->insertButton(loader->loadIcon("down", KIcon::Toolbar), ID_TOOL_DOWN, TRUE, i18n("Shift down.")); topToolbar->insertButton(loader->loadIcon("forward", KIcon::Toolbar), ID_TOOL_RIGHT, TRUE, i18n("Shift right.")); topToolbar->insertSeparator(); topToolbar->insertButton(loader->loadIcon("exit", KIcon::Toolbar), ID_META_EXIT, TRUE, i18n("Exit.")); // status in the toolbar for now (ick) theLabel = new QLabel(statusText(), topToolbar); int lWidth = theLabel->sizeHint().width(); topToolbar->insertWidget(ID_TOOL_STATUS,lWidth, theLabel ); topToolbar->alignItemRight( ID_TOOL_STATUS, true ); //addToolBar(topToolbar); connect( topToolbar, SIGNAL(clicked(int) ), SLOT( topToolbarOption(int) ) ); topToolbar->updateRects(0); topToolbar->setFullSize(true); topToolbar->setBarPos(KToolBar::Top);// topToolbar->enableMoving(false); topToolbar->adjustSize(); setMinimumWidth(topToolbar->width());} void Editor::statusChanged(void) { bool canSave = ((numTiles !=0) && ((numTiles & 1) == 0)); theLabel->setText(statusText()); topToolbar->setItemEnabled( ID_TOOL_SAVE, canSave); }void Editor::topToolbarOption(int option) { switch(option) { case ID_TOOL_NEW: newBoard(); break; case ID_TOOL_LOAD: loadBoard(); break; case ID_TOOL_SAVE: saveBoard(); break; case ID_TOOL_LEFT: theBoard.shiftLeft(); repaint(false); break; case ID_TOOL_RIGHT: theBoard.shiftRight(); repaint(false); break; case ID_TOOL_UP: theBoard.shiftUp(); repaint(false); break; case ID_TOOL_DOWN: theBoard.shiftDown(); repaint(false); break; case ID_TOOL_DEL: mode=remove; break; case ID_TOOL_MOVE: mode=move; break; case ID_TOOL_ADD: mode = insert; break; case ID_META_EXIT: close(); break; default: break; }}QString Editor::statusText(void) { QString buf; int x=currPos.x; int y=currPos.y; int z= currPos.e; if (z == 100) z = 0; else z=z+1; if (x >=BoardLayout::width || x <0 || y >=BoardLayout::height || y <0) x = y = z = 0; buf = QString::fromUtf8(QCString().sprintf(i18n("Tiles: %3.3d Pos: %2.2d,%2.2d,%2.2d").utf8().data(), numTiles, x,y,z) ); return buf;}void Editor::loadBoard(void) { if ( !testSave() ) return; KURL url = KFileDialog::getOpenURL( NULL, "*.layout|Board layout (*.layout)\n" "*.*|All files (*.*)", this, i18n("Open board layout." )); if ( url.isEmpty() ) return; theBoard.loadBoardLayout( url.path() ); repaint(false);}// Clear out the contents of the board. Repaint the screen// set values to their defaults.void Editor::newBoard(void) { if (!testSave()) return; theBoard.clearBoardLayout(); clean=true; numTiles=0; statusChanged(); repaint(false);}bool Editor::saveBoard(void) { // get a save file name KURL url = KFileDialog::getSaveURL( NULL, "*.layout|Board layout (*.layout)\n" "*.*|All files (*.*)", this, i18n("Save board layout." )); if( !url.isLocalFile() ) { KMessageBox::sorry( this, i18n( "Only saving to local files currently supported." ) ); return false; } if ( url.isEmpty() ) return false; QFileInfo f( url.path() ); if ( f.exists() ) { // if it already exists, querie the user for replacement int res=KMessageBox::warningYesNo(this, i18n("A file with that name " "already exists, do you " "wish to overwrite it?"),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -