diff --git a/cockatrice/cockatrice.pro b/cockatrice/cockatrice.pro index 8c4dad2e..31d1cf5f 100644 --- a/cockatrice/cockatrice.pro +++ b/cockatrice/cockatrice.pro @@ -16,5 +16,9 @@ QT += network svg #QTPLUGIN += qjpeg # Input -HEADERS += src/counter.h src/gameselector.h src/dlg_creategame.h src/dlg_connect.h src/gamesmodel.h src/client.h src/window_main.h src/servergame.h src/servereventdata.h src/zonelist.h src/cardzone.h src/player.h src/cardlist.h src/carditem.h src/tablezone.h src/handzone.h src/playerlist.h src/game.h src/carddatabase.h src/gameview.h src/decklistmodel.h src/dlg_startgame.h src/cardinfowidget.h src/messagelogwidget.h src/serverzonecard.h src/zoneviewzone.h src/zoneviewwidget.h src/libraryzone.h src/pilezone.h src/carddragitem.h src/zoneviewlayout.h src/playerarea.h src/carddatabasemodel.h src/window_deckeditor.h src/decklist.h setsmodel.h src/window_sets.h src/dlg_editmessages.h src/abstractgraphicsitem.h -SOURCES += src/counter.cpp src/gameselector.cpp src/dlg_creategame.cpp src/dlg_connect.cpp src/client.cpp src/main.cpp src/window_main.cpp src/servereventdata.cpp src/gamesmodel.cpp src/player.cpp src/cardzone.cpp src/zonelist.cpp src/cardlist.cpp src/carditem.cpp src/tablezone.cpp src/handzone.cpp src/playerlist.cpp src/game.cpp src/carddatabase.cpp src/gameview.cpp src/decklistmodel.cpp src/dlg_startgame.cpp src/cardinfowidget.cpp src/messagelogwidget.cpp src/zoneviewzone.cpp src/zoneviewwidget.cpp src/libraryzone.cpp src/pilezone.cpp src/carddragitem.cpp src/zoneviewlayout.cpp src/playerarea.cpp src/carddatabasemodel.cpp src/window_deckeditor.cpp src/decklist.cpp src/setsmodel.cpp src/window_sets.cpp src/dlg_editmessages.cpp src/abstractgraphicsitem.cpp +HEADERS += src/counter.h src/gameselector.h src/dlg_creategame.h src/dlg_connect.h src/gamesmodel.h src/client.h src/window_main.h src/servergame.h src/servereventdata.h src/zonelist.h src/cardzone.h src/player.h src/cardlist.h src/carditem.h src/tablezone.h src/handzone.h src/playerlist.h src/game.h src/carddatabase.h src/gameview.h src/decklistmodel.h src/dlg_startgame.h src/cardinfowidget.h src/messagelogwidget.h src/serverzonecard.h src/zoneviewzone.h src/zoneviewwidget.h src/libraryzone.h src/pilezone.h src/carddragitem.h src/zoneviewlayout.h src/playerarea.h src/carddatabasemodel.h src/window_deckeditor.h src/decklist.h setsmodel.h src/window_sets.h src/abstractgraphicsitem.h src/dlg_settings.h +SOURCES += src/counter.cpp src/gameselector.cpp src/dlg_creategame.cpp src/dlg_connect.cpp src/client.cpp src/main.cpp src/window_main.cpp src/servereventdata.cpp src/gamesmodel.cpp src/player.cpp src/cardzone.cpp src/zonelist.cpp src/cardlist.cpp src/carditem.cpp src/tablezone.cpp src/handzone.cpp src/playerlist.cpp src/game.cpp src/carddatabase.cpp src/gameview.cpp src/decklistmodel.cpp src/dlg_startgame.cpp src/cardinfowidget.cpp src/messagelogwidget.cpp src/zoneviewzone.cpp src/zoneviewwidget.cpp src/libraryzone.cpp src/pilezone.cpp src/carddragitem.cpp src/zoneviewlayout.cpp src/playerarea.cpp src/carddatabasemodel.cpp src/window_deckeditor.cpp src/decklist.cpp src/setsmodel.cpp src/window_sets.cpp src/abstractgraphicsitem.cpp src/dlg_settings.cpp +TRANSLATIONS += \ + translations/cockatrice_de.ts \ + translations/cockatrice_en.ts + diff --git a/cockatrice/cockatrice.qrc b/cockatrice/cockatrice.qrc index 332bf56a..d2a54e76 100644 --- a/cockatrice/cockatrice.qrc +++ b/cockatrice/cockatrice.qrc @@ -1,5 +1,8 @@ resources/back.svg + + translations/cockatrice_de.qm + translations/cockatrice_en.qm diff --git a/cockatrice/src/dlg_editmessages.cpp b/cockatrice/src/dlg_editmessages.cpp deleted file mode 100644 index 7f2c99f3..00000000 --- a/cockatrice/src/dlg_editmessages.cpp +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include "dlg_editmessages.h" - -DlgEditMessages::DlgEditMessages(QWidget *parent) - : QDialog(parent) -{ - aAdd = new QAction(tr("Add"), this); - connect(aAdd, SIGNAL(triggered()), this, SLOT(actAdd())); - aRemove = new QAction(tr("Remove"), this); - connect(aRemove, SIGNAL(triggered()), this, SLOT(actRemove())); - - messageList = new QListWidget; - QToolBar *messageToolBar = new QToolBar; - messageToolBar->setOrientation(Qt::Vertical); - messageToolBar->addAction(aAdd); - messageToolBar->addAction(aRemove); - - QSettings settings; - settings.beginGroup("messages"); - int count = settings.value("count", 0).toInt(); - for (int i = 0; i < count; i++) - messageList->addItem(settings.value(QString("msg%1").arg(i)).toString()); - - QHBoxLayout *listLayout = new QHBoxLayout; - listLayout->addWidget(messageList); - listLayout->addWidget(messageToolBar); - - cancelButton = new QPushButton(tr("&Cancel")); - okButton = new QPushButton(tr("O&K")); - okButton->setAutoDefault(true); - - QHBoxLayout *buttonLayout = new QHBoxLayout; - buttonLayout->addStretch(); - buttonLayout->addWidget(cancelButton); - buttonLayout->addWidget(okButton); - - QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addLayout(listLayout); - mainLayout->addLayout(buttonLayout); - - setLayout(mainLayout); - - setWindowTitle(tr("Edit messages")); - setMinimumWidth(sizeHint().width()); - resize(300, 300); - - connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); - connect(okButton, SIGNAL(clicked()), this, SLOT(accept())); -} - -void DlgEditMessages::storeSettings() -{ - QSettings settings; - settings.beginGroup("messages"); - settings.setValue("count", messageList->count()); - for (int i = 0; i < messageList->count(); i++) - settings.setValue(QString("msg%1").arg(i), messageList->item(i)->text()); -} - -void DlgEditMessages::actAdd() -{ - bool ok; - QString msg = QInputDialog::getText(this, tr("Add message"), QString("Message:"), QLineEdit::Normal, QString(), &ok); - if (ok) { - messageList->addItem(msg); - storeSettings(); - } -} - -void DlgEditMessages::actRemove() -{ - if (messageList->currentItem()) { - delete messageList->takeItem(messageList->currentRow()); - storeSettings(); - } -} diff --git a/cockatrice/src/dlg_editmessages.h b/cockatrice/src/dlg_editmessages.h deleted file mode 100644 index 583f65f4..00000000 --- a/cockatrice/src/dlg_editmessages.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef DLG_EDITMESSAGES_H -#define DLG_EDITMESSAGES_H - -#include - -class QListWidget; -class QPushButton; - -class DlgEditMessages: public QDialog { - Q_OBJECT -public: - DlgEditMessages(QWidget *parent = 0); -private slots: - void actAdd(); - void actRemove(); -private: - QListWidget *messageList; - QAction *aAdd, *aRemove; - QPushButton *cancelButton, *okButton; - - void storeSettings(); -}; - -#endif diff --git a/cockatrice/src/dlg_settings.cpp b/cockatrice/src/dlg_settings.cpp new file mode 100644 index 00000000..0f6bbd68 --- /dev/null +++ b/cockatrice/src/dlg_settings.cpp @@ -0,0 +1,187 @@ +#include + +#include "dlg_settings.h" + +GeneralSettingsPage::GeneralSettingsPage() +{ + QGroupBox *personalGroupBox = new QGroupBox(tr("Personal settings")); + QLabel *languageLabel = new QLabel(tr("Language:")); + QComboBox *languageBox = new QComboBox; + + QStringList qmFiles = findQmFiles(); + for (int i = 0; i < qmFiles.size(); i++) + languageBox->addItem(languageName(qmFiles[i]), qmFiles[i]); + + QGridLayout *personalGrid = new QGridLayout; + personalGrid->addWidget(languageLabel, 0, 0); + personalGrid->addWidget(languageBox, 0, 1); + personalGroupBox->setLayout(personalGrid); + + QGroupBox *pathsGroupBox = new QGroupBox(tr("Paths")); + QLabel *deckPathLabel = new QLabel(tr("Decks directory:")); + QLineEdit *deckPathEdit = new QLineEdit; + QLabel *picsPathLabel = new QLabel(tr("Pictures directory:")); + QLineEdit *picsPathEdit = new QLineEdit; + QLabel *cardDatabasePathLabel = new QLabel(tr("Path to card database:")); + QLineEdit *cardDatabasePathEdit = new QLineEdit; + + QGridLayout *pathsGrid = new QGridLayout; + pathsGrid->addWidget(deckPathLabel, 0, 0); + pathsGrid->addWidget(deckPathEdit, 0, 1); + pathsGrid->addWidget(picsPathLabel, 1, 0); + pathsGrid->addWidget(picsPathEdit, 1, 1); + pathsGrid->addWidget(cardDatabasePathLabel, 2, 0); + pathsGrid->addWidget(cardDatabasePathEdit, 2, 1); + pathsGroupBox->setLayout(pathsGrid); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(personalGroupBox); + mainLayout->addWidget(pathsGroupBox); + + setLayout(mainLayout); +} + +QStringList GeneralSettingsPage::findQmFiles() +{ + QDir dir(":/translations"); + QStringList fileNames = dir.entryList(QStringList("*.qm"), QDir::Files, QDir::Name); + QMutableStringListIterator i(fileNames); + while (i.hasNext()) { + i.next(); + i.setValue(dir.filePath(i.value())); + } + return fileNames; +} + +QString GeneralSettingsPage::languageName(const QString &qmFile) +{ + QTranslator translator; + translator.load(qmFile); + + return translator.translate("GeneralSettingsPage", "English"); +} + +AppearanceSettingsPage::AppearanceSettingsPage() +{ + +} + +MessagesSettingsPage::MessagesSettingsPage() +{ + aAdd = new QAction(tr("Add"), this); + connect(aAdd, SIGNAL(triggered()), this, SLOT(actAdd())); + aRemove = new QAction(tr("Remove"), this); + connect(aRemove, SIGNAL(triggered()), this, SLOT(actRemove())); + + messageList = new QListWidget; + QToolBar *messageToolBar = new QToolBar; + messageToolBar->setOrientation(Qt::Vertical); + messageToolBar->addAction(aAdd); + messageToolBar->addAction(aRemove); + + QSettings settings; + settings.beginGroup("messages"); + int count = settings.value("count", 0).toInt(); + for (int i = 0; i < count; i++) + messageList->addItem(settings.value(QString("msg%1").arg(i)).toString()); + + QHBoxLayout *mainLayout = new QHBoxLayout; + mainLayout->addWidget(messageList); + mainLayout->addWidget(messageToolBar); + + setLayout(mainLayout); +} + +void MessagesSettingsPage::storeSettings() +{ + QSettings settings; + settings.beginGroup("messages"); + settings.setValue("count", messageList->count()); + for (int i = 0; i < messageList->count(); i++) + settings.setValue(QString("msg%1").arg(i), messageList->item(i)->text()); +} + +void MessagesSettingsPage::actAdd() +{ + bool ok; + QString msg = QInputDialog::getText(this, tr("Add message"), tr("Message:"), QLineEdit::Normal, QString(), &ok); + if (ok) { + messageList->addItem(msg); + storeSettings(); + } +} + +void MessagesSettingsPage::actRemove() +{ + if (messageList->currentItem()) { + delete messageList->takeItem(messageList->currentRow()); + storeSettings(); + } +} + +DlgSettings::DlgSettings() + : QDialog() +{ + contentsWidget = new QListWidget; + contentsWidget->setViewMode(QListView::IconMode); + contentsWidget->setIconSize(QSize(96, 84)); + contentsWidget->setMovement(QListView::Static); + contentsWidget->setMaximumWidth(128); + contentsWidget->setSpacing(12); + + pagesWidget = new QStackedWidget; + pagesWidget->addWidget(new GeneralSettingsPage); + pagesWidget->addWidget(new AppearanceSettingsPage); + pagesWidget->addWidget(new MessagesSettingsPage); + + QPushButton *closeButton = new QPushButton(tr("&Close")); + connect(closeButton, SIGNAL(clicked()), this, SLOT(close())); + + createIcons(); + contentsWidget->setCurrentRow(0); + + QHBoxLayout *hboxLayout = new QHBoxLayout; + hboxLayout->addWidget(contentsWidget); + hboxLayout->addWidget(pagesWidget, 1); + + QHBoxLayout *buttonsLayout = new QHBoxLayout; + buttonsLayout->addStretch(1); + buttonsLayout->addWidget(closeButton); + + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addLayout(hboxLayout); + mainLayout->addStretch(1); + mainLayout->addSpacing(12); + mainLayout->addLayout(buttonsLayout); + setLayout(mainLayout); + + setWindowTitle(tr("Settings")); +} + +void DlgSettings::createIcons() +{ + QListWidgetItem *generalButton = new QListWidgetItem(contentsWidget); + generalButton->setText(tr("General")); + generalButton->setTextAlignment(Qt::AlignHCenter); + generalButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + + QListWidgetItem *appearanceButton = new QListWidgetItem(contentsWidget); + appearanceButton->setText(tr("Appearance")); + appearanceButton->setTextAlignment(Qt::AlignHCenter); + appearanceButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + + QListWidgetItem *messagesButton = new QListWidgetItem(contentsWidget); + messagesButton->setText(tr("Messages")); + messagesButton->setTextAlignment(Qt::AlignHCenter); + messagesButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); + + connect(contentsWidget, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(changePage(QListWidgetItem *, QListWidgetItem *))); +} + +void DlgSettings::changePage(QListWidgetItem *current, QListWidgetItem *previous) +{ + if (!current) + current = previous; + + pagesWidget->setCurrentIndex(contentsWidget->row(current)); +} diff --git a/cockatrice/src/dlg_settings.h b/cockatrice/src/dlg_settings.h new file mode 100644 index 00000000..f6934ccb --- /dev/null +++ b/cockatrice/src/dlg_settings.h @@ -0,0 +1,51 @@ +#ifndef DLG_SETTINGS_H +#define DLG_SETTINGS_H + +#include + +class QListWidget; +class QListWidgetItem; +class QStackedWidget; + +class GeneralSettingsPage : public QWidget { + Q_OBJECT +public: + GeneralSettingsPage(); +private: + QStringList findQmFiles(); + QString languageName(const QString &qmFile); +}; + +class AppearanceSettingsPage : public QWidget { + Q_OBJECT +public: + AppearanceSettingsPage(); +}; + +class MessagesSettingsPage : public QWidget { + Q_OBJECT +public: + MessagesSettingsPage(); +private slots: + void actAdd(); + void actRemove(); +private: + QListWidget *messageList; + QAction *aAdd, *aRemove; + + void storeSettings(); +}; + +class DlgSettings : public QDialog { + Q_OBJECT +public: + DlgSettings(); +public slots: + void changePage(QListWidgetItem *current, QListWidgetItem *previous); +private: + QListWidget *contentsWidget; + QStackedWidget *pagesWidget; + void createIcons(); +}; + +#endif diff --git a/cockatrice/src/game.cpp b/cockatrice/src/game.cpp index 8a0371bb..5881961a 100644 --- a/cockatrice/src/game.cpp +++ b/cockatrice/src/game.cpp @@ -10,7 +10,6 @@ #include "handzone.h" #include "carddatabase.h" #include "dlg_startgame.h" -#include "dlg_editmessages.h" #include "playerarea.h" #include "counter.h" @@ -54,9 +53,6 @@ Game::Game(CardDatabase *_db, Client *_client, QGraphicsScene *_scene, QMenu *_a aCreateToken->setShortcut(tr("Ctrl+T")); connect(aCreateToken, SIGNAL(triggered()), this, SLOT(actCreateToken())); - aEditMessages = new QAction(tr("&Edit messages..."), this); - connect(aEditMessages, SIGNAL(triggered()), this, SLOT(actEditMessages())); - actionsMenu->addAction(aUntapAll); actionsMenu->addSeparator(); actionsMenu->addAction(aDecLife); @@ -115,8 +111,6 @@ Game::~Game() void Game::initSayMenu() { sayMenu->clear(); - sayMenu->addAction(aEditMessages); - sayMenu->addSeparator(); QSettings settings; settings.beginGroup("messages"); @@ -325,13 +319,6 @@ void Game::actCreateToken() client->createToken("table", cardname, QString(), 0, 0); } -void Game::actEditMessages() -{ - DlgEditMessages dlg; - if (dlg.exec()) - initSayMenu(); -} - void Game::showCardMenu(QPoint p) { cardMenu->exec(p); diff --git a/cockatrice/src/game.h b/cockatrice/src/game.h index 158eac71..b004d9d4 100644 --- a/cockatrice/src/game.h +++ b/cockatrice/src/game.h @@ -16,7 +16,7 @@ class Game : public QObject { private: QMenu *actionsMenu, *sayMenu, *cardMenu; QAction *aTap, *aUntap, *aDoesntUntap, *aFlip, *aAddCounter, *aRemoveCounter, *aSetCounters, - *aUntapAll, *aDecLife, *aIncLife, *aSetLife, *aShuffle, *aDraw, *aDrawCards, *aRollDice, *aCreateToken, *aEditMessages; + *aUntapAll, *aDecLife, *aIncLife, *aSetLife, *aShuffle, *aDraw, *aDrawCards, *aRollDice, *aCreateToken; DlgStartGame *dlgStartGame; CardDatabase *db; @@ -37,7 +37,6 @@ private slots: void actDrawCards(); void actRollDice(); void actCreateToken(); - void actEditMessages(); void showCardMenu(QPoint p); void actDoesntUntap(); diff --git a/cockatrice/src/window_main.cpp b/cockatrice/src/window_main.cpp index 8b5f36c0..6afbd4c4 100644 --- a/cockatrice/src/window_main.cpp +++ b/cockatrice/src/window_main.cpp @@ -22,6 +22,7 @@ #include "window_main.h" #include "dlg_connect.h" +#include "dlg_settings.h" #include "gameselector.h" #include "window_deckeditor.h" #include "cardinfowidget.h" @@ -130,6 +131,12 @@ void MainWindow::actFullScreen(bool checked) setWindowState(windowState() & ~Qt::WindowFullScreen); } +void MainWindow::actSettings() +{ + DlgSettings dlg; + dlg.exec(); +} + void MainWindow::actExit() { close(); @@ -193,6 +200,8 @@ void MainWindow::createActions() aFullScreen->setShortcut(tr("Ctrl+F")); aFullScreen->setCheckable(true); connect(aFullScreen, SIGNAL(toggled(bool)), this, SLOT(actFullScreen(bool))); + aSettings = new QAction(tr("&Settings..."), this); + connect(aSettings, SIGNAL(triggered()), this, SLOT(actSettings())); aExit = new QAction(tr("&Exit"), this); connect(aExit, SIGNAL(triggered()), this, SLOT(actExit())); @@ -215,6 +224,8 @@ void MainWindow::createMenus() gameMenu->addSeparator(); gameMenu->addAction(aFullScreen); gameMenu->addSeparator(); + gameMenu->addAction(aSettings); + gameMenu->addSeparator(); gameMenu->addAction(aExit); actionsMenu = menuBar()->addMenu(tr("&Actions")); diff --git a/cockatrice/src/window_main.h b/cockatrice/src/window_main.h index b4d090b0..3d33675d 100644 --- a/cockatrice/src/window_main.h +++ b/cockatrice/src/window_main.h @@ -56,6 +56,7 @@ private slots: void actLeaveGame(); void actDeckEditor(); void actFullScreen(bool checked); + void actSettings(); void actExit(); void updateSceneSize(); @@ -66,7 +67,7 @@ private: void createActions(); void createMenus(); QMenu *gameMenu, *actionsMenu, *cardMenu; - QAction *aConnect, *aDisconnect, *aRestartGame, *aLeaveGame, *aDeckEditor, *aFullScreen, *aExit; + QAction *aConnect, *aDisconnect, *aRestartGame, *aLeaveGame, *aDeckEditor, *aFullScreen, *aSettings, *aExit; QAction *aCloseMostRecentZoneView; QVBoxLayout *viewLayout;