Skip to content

Commit

Permalink
Improvements in Tabs
Browse files Browse the repository at this point in the history
  • Loading branch information
coder3101 committed Jan 9, 2020
1 parent c7f938d commit 73d67fc
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 31 deletions.
2 changes: 1 addition & 1 deletion include/appwindow.hpp
Expand Up @@ -103,7 +103,7 @@ class AppWindow : public QMainWindow
void maybeSetHotkeys();
void closeAll();
bool closeTab(int index);
void openFile(QString fileName);
void openTab(QString fileName, bool isCompanionTab = false);
};

#endif // APPWINDOW_HPP
4 changes: 4 additions & 0 deletions include/mainwindow.hpp
Expand Up @@ -31,6 +31,7 @@
#include <Runner.hpp>
#include <SettingsManager.hpp>
#include <UpdateNotifier.hpp>
#include <cftools.hpp>
#include <generated/version.hpp>

QT_BEGIN_NAMESPACE
Expand All @@ -50,6 +51,7 @@ class MainWindow : public QMainWindow

QString fileName() const;
QString filePath() const;
QString problemURL() const;
void save(bool force);
void saveAs();

Expand Down Expand Up @@ -118,12 +120,14 @@ class MainWindow : public QMainWindow
QVector<QPlainTextEdit *> output = QVector<QPlainTextEdit *>(3, nullptr);
QVector<QLabel *> verdict = QVector<QLabel *>(3, nullptr);
QVector<QString *> expected = QVector<QString *>(3, nullptr);
Network::CompanionData companionData;

void setEditor();
void setupCore();
void clearTests(bool outputOnly = false);
void loadTests();
void saveTests();
void setCFToolsUI();
void updateVerdict(Core::Verdict, int);
bool isTextChanged();

Expand Down
84 changes: 55 additions & 29 deletions src/appwindow.cpp
Expand Up @@ -14,9 +14,9 @@ AppWindow::AppWindow(QStringList args, QWidget *parent) : AppWindow(parent)
ui->tabWidget->clear();
if (args.size() > 1)
for (int i = 1; i < args.size(); ++i)
openFile(args[i]);
openTab(args[i]);
else
openFile("");
openTab("");
}

AppWindow::AppWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::AppWindow)
Expand Down Expand Up @@ -76,7 +76,7 @@ void AppWindow::dropEvent(QDropEvent *event)
for (auto e : files)
{
auto fileName = e.toLocalFile();
openFile(fileName);
openTab(fileName);
}
}

Expand Down Expand Up @@ -205,34 +205,64 @@ void AppWindow::saveSettings()
settingManager->setMaximizedWindow(this->isMaximized());
}

void AppWindow::openFile(QString fileName)
void AppWindow::openTab(QString fileName, bool iscompanionOpenedTab)
{
if (!fileName.isEmpty())
if (!iscompanionOpenedTab)
{
if (!fileName.isEmpty())
{
for (int t = 0; t < ui->tabWidget->count(); t++)
{
auto tmp = dynamic_cast<MainWindow *>(ui->tabWidget->widget(t));
if (fileName == tmp->filePath())
{
ui->tabWidget->setCurrentIndex(t);
return;
}
}
}

int t = ui->tabWidget->count();
auto fsp = new MainWindow(t, fileName);
fsp->setSettingsData(settingManager->toData(), true);
connect(fsp, SIGNAL(confirmTriggered(MainWindow *)), this, SLOT(on_confirmTriggered(MainWindow *)));
connect(fsp, SIGNAL(editorTextChanged(bool, MainWindow *)), this,
SLOT(onEditorTextChanged(bool, MainWindow *)));
QString lang = settingManager->getDefaultLang();

if (fileName.endsWith(".java"))
lang = "Java";
else if (fileName.endsWith(".py") || fileName.endsWith(".py3"))
lang = "Python";
else if (fileName.endsWith(".cpp") || fileName.endsWith(".cxx") || fileName.endsWith(".c") ||
fileName.endsWith(".cc") || fileName.endsWith(".hpp") || fileName.endsWith(".h"))
lang = "Cpp";

ui->tabWidget->addTab(fsp, fsp->fileName());
fsp->setLanguage(lang);
ui->tabWidget->setCurrentIndex(t);
}
else
{
for (int t = 0; t < ui->tabWidget->count(); t++)
{
auto tmp = dynamic_cast<MainWindow *>(ui->tabWidget->widget(t));
if (fileName == tmp->filePath())
if (fileName == tmp->problemURL())
{
ui->tabWidget->setCurrentIndex(t);
return;
}
}
}

int t = ui->tabWidget->count();
auto fsp = new MainWindow(t, fileName);
fsp->setSettingsData(settingManager->toData(), true);
connect(fsp, SIGNAL(confirmTriggered(MainWindow *)), this, SLOT(on_confirmTriggered(MainWindow *)));
connect(fsp, SIGNAL(editorTextChanged(bool, MainWindow *)), this, SLOT(onEditorTextChanged(bool, MainWindow *)));
QString lang = "Cpp";
if (fileName.endsWith(".java"))
lang = "Java";
else if (fileName.endsWith(".py") || fileName.endsWith(".py3"))
lang = "Python";
ui->tabWidget->addTab(fsp, fsp->fileName());
fsp->setLanguage(lang);
ui->tabWidget->setCurrentIndex(t);
int t = ui->tabWidget->count();
auto fsp = new MainWindow(t, "");
fsp->setSettingsData(settingManager->toData(), true);
connect(fsp, SIGNAL(confirmTriggered(MainWindow *)), this, SLOT(on_confirmTriggered(MainWindow *)));
connect(fsp, SIGNAL(editorTextChanged(bool, MainWindow *)), this,
SLOT(onEditorTextChanged(bool, MainWindow *)));
ui->tabWidget->addTab(fsp, fsp->fileName());
ui->tabWidget->setCurrentIndex(t);
}
}

/***************** ABOUT SECTION ***************************/
Expand Down Expand Up @@ -282,7 +312,7 @@ void AppWindow::on_actionQuit_triggered()

void AppWindow::on_actionNew_Tab_triggered()
{
openFile("");
openTab("");
}

void AppWindow::on_actionOpen_triggered()
Expand All @@ -292,7 +322,7 @@ void AppWindow::on_actionOpen_triggered()
if (fileName.isEmpty())
return;

openFile(fileName);
openTab(fileName);
}

void AppWindow::on_actionSave_triggered()
Expand Down Expand Up @@ -367,7 +397,7 @@ void AppWindow::onTabChanged(int index)
activeLogger = tmp->getLogger();
server->setMessageLogger(activeLogger);

if (settingManager->isCompetitiveCompanionActive())
if (settingManager->isCompetitiveCompanionActive() && diagonistics)
server->checkServer();

tmp->setSettingsData(settingManager->toData(), diagonistics);
Expand Down Expand Up @@ -434,12 +464,8 @@ void AppWindow::onSettingsApplied()

void AppWindow::onIncomingCompanionRequest(Network::CompanionData data)
{
auto current = ui->tabWidget->currentIndex();
if (current == -1)
{
openFile("");
current = 0;
}
openTab(data.url, true);
int current = ui->tabWidget->currentIndex();
auto tmp = dynamic_cast<MainWindow *>(ui->tabWidget->widget(current));
tmp->applyCompanion(data);
}
Expand Down
9 changes: 8 additions & 1 deletion src/cftools.cpp
Expand Up @@ -17,7 +17,14 @@ void CFTools::submit()

bool CFTools::check()
{
return true;
QProcess program;
QString commandToStart = "cf";
QStringList environment = program.systemEnvironment();
program.start(commandToStart + " --version");
bool started = program.waitForStarted();
if (started) // 10 Second timeout
program.kill();
return started;
}

} // namespace Network
12 changes: 12 additions & 0 deletions src/mainwindow.cc
Expand Up @@ -276,6 +276,11 @@ void MainWindow::saveTests()
}
}

void MainWindow::setCFToolsUI()
{
ui->horizontalLayout_9->addWidget(new QPushButton("Submit on Codeforces", this));
}

QString MainWindow::fileName() const
{
return openFile == nullptr || !openFile->isOpen() ? "untitled" : QFileInfo(*openFile).fileName();
Expand All @@ -285,6 +290,10 @@ QString MainWindow::filePath() const
{
return openFile == nullptr || !openFile->isOpen() ? "" : openFile->fileName();
}
QString MainWindow::problemURL() const
{
return companionData.url;
}

void MainWindow::updateVerdict(Core::Verdict _verdict, int id)
{
Expand Down Expand Up @@ -338,6 +347,9 @@ void MainWindow::applyCompanion(Network::CompanionData data)
input[i]->setPlainText(data.testcases[i].input);
expected[i]->operator=(data.testcases[i].output);
}
companionData = data;
if (data.url.contains("codeforces.com"))
setCFToolsUI();
onTextChangedTriggered();
}
void MainWindow::setSettingsData(Settings::SettingsData data, bool shouldPerformDigonistic)
Expand Down

0 comments on commit 73d67fc

Please sign in to comment.