Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

maindialog.cpp 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. #include <QApplication>
  2. #include <QDesktopWidget>
  3. #include <QDebug>
  4. #include "maindialog.h"
  5. #include "ui_maindialog.h"
  6. #include "rdesktoplauncher.h"
  7. #include "rdpoptionshelper.h"
  8. MainDialog::MainDialog(QWidget *parent) :
  9. QDialog(parent),
  10. ui(new Ui::MainDialog)
  11. {
  12. ui->setupUi(this);
  13. connect(ui->lineComputer->lineEdit(), SIGNAL(returnPressed()), ui->btnConnect, SLOT(animateClick()));
  14. connect(ui->lineComputer->lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(textChanged(QString)));
  15. computeResolutions();
  16. QStringList layouts;
  17. for (int l = QLocale::Abkhazian; l <= QLocale::Shambala; ++l)
  18. {
  19. QString name = QLocale((QLocale::Language)l).name();
  20. if (!layouts.contains(name))
  21. layouts.append(name);
  22. }
  23. layouts.sort();
  24. ui->comboKeyboard->addItems(layouts);
  25. ui->comboKeyboard->setCurrentIndex(ui->comboKeyboard->findText("en_US"));
  26. m_rdpOptions = RdpOptionsHelper::loadAll();
  27. ui->lineComputer->addItem("");
  28. for (int i = 1; i < m_rdpOptions.size(); ++i)
  29. {
  30. RdpOptions opt = m_rdpOptions.at(i);
  31. ui->lineComputer->addItem(opt.host());
  32. }
  33. ui->lineComputer->setFocus();
  34. }
  35. MainDialog::~MainDialog()
  36. {
  37. delete ui;
  38. }
  39. RdpOptions MainDialog::getRdpOptions() const
  40. {
  41. RdpOptions opt;
  42. opt.setHost(ui->lineComputer->currentText());
  43. opt.setUsername(ui->lineUsername->text());
  44. opt.setPassword(ui->linePassword->text());
  45. opt.setFullscreen(ui->slidResolution->value() == m_resolutions.size());
  46. if (!opt.fullscreen())
  47. opt.setResolution(m_resolutions.at(m_resolutions.size() - 1));
  48. opt.setUseAllMonitors(ui->checkAllDisplays->isChecked());
  49. int colors = ui->comboColors->currentIndex();
  50. RdpOptions::Colors c;
  51. if (colors == 0)
  52. c = RdpOptions::HighColor_15;
  53. else if (colors == 1)
  54. c = RdpOptions::HighColor_16;
  55. else if (colors == 2)
  56. c = RdpOptions::TrueColor;
  57. else if (colors == 3)
  58. c = RdpOptions::HighestQuality;
  59. opt.setColors(c);
  60. opt.setFullscreenBar(ui->checkFullscreenBar->isChecked());
  61. int meta = ui->comboMetaKeys->currentIndex();
  62. opt.setMetaKeys(meta == 0 || (opt.fullscreen() && meta == 2));
  63. opt.setUseShell(ui->checkShell->isChecked());
  64. if (opt.useShell())
  65. {
  66. opt.setShell(ui->lineShellPath->text());
  67. opt.setShellWorkingDir(ui->lineShellWorkingDir->text());
  68. }
  69. opt.setExperience((RdpOptions::Experience)ui->comboExperience->currentIndex());
  70. opt.setBitmapCache(ui->checkCacheBitmap->isChecked());
  71. opt.setAutoReconnect(ui->checkAutoReconnect->isChecked());
  72. opt.setKeymap(ui->comboKeyboard->currentText());
  73. return opt;
  74. }
  75. void MainDialog::setRdpOptions(const RdpOptions &opt)
  76. {
  77. ui->lineComputer->lineEdit()->setText(opt.host());
  78. ui->lineUsername->setText(opt.username());
  79. ui->linePassword->setText(opt.password());
  80. if (opt.fullscreen())
  81. {
  82. ui->slidResolution->setValue(ui->slidResolution->maximum());
  83. }
  84. else
  85. {
  86. ui->slidResolution->setValue(ui->slidResolution->maximum() - 1);
  87. }
  88. ui->checkAllDisplays->setChecked(opt.useAllMonitors());
  89. int index = 0;
  90. RdpOptions::Colors c = opt.colors();
  91. if (c == RdpOptions::HighColor_15)
  92. index = 0;
  93. else if (c == RdpOptions::HighColor_16)
  94. index = 1;
  95. else if (c == RdpOptions::TrueColor)
  96. index = 2;
  97. else if (c == RdpOptions::HighestQuality)
  98. index = 3;
  99. ui->comboColors->setCurrentIndex(index);
  100. ui->checkFullscreenBar->setChecked(opt.fullscreenBar());
  101. ui->comboMetaKeys->setCurrentIndex(opt.metaKeys() ? 2 : 1);
  102. ui->checkShell->setChecked(opt.useShell());
  103. ui->lineShellPath->setText(opt.shell());
  104. ui->lineShellWorkingDir->setText(opt.shellWorkingDir());
  105. ui->comboExperience->setCurrentIndex((int)opt.experience());
  106. ui->checkCacheBitmap->setChecked(opt.bitmapCache());
  107. ui->checkAutoReconnect->setChecked(opt.autoReconnect());
  108. ui->comboKeyboard->setCurrentIndex(ui->comboKeyboard->findText(opt.keymap()));
  109. }
  110. void MainDialog::on_btnConnect_clicked()
  111. {
  112. RdpOptions opt = getRdpOptions();
  113. RdpOptionsHelper::save(opt);
  114. RDesktopLauncher launcher;
  115. launcher.start(opt);
  116. }
  117. void MainDialog::textChanged(QString)
  118. {
  119. ui->btnConnect->setEnabled(!ui->lineComputer->lineEdit()->text().isEmpty());
  120. }
  121. void MainDialog::computeResolutions()
  122. {
  123. m_resolutions.append(QApplication::desktop()->availableGeometry().size());
  124. ui->slidResolution->setMinimum(0);
  125. ui->slidResolution->setMaximum(m_resolutions.size());
  126. ui->slidResolution->setValue(m_resolutions.size());
  127. }
  128. void MainDialog::on_slidResolution_valueChanged(int value)
  129. {
  130. if (value < m_resolutions.size())
  131. {
  132. QSize reso = m_resolutions.at(value);
  133. ui->lblResolution->setText(QString("%1x%2").arg(reso.width()).arg(reso.height()));
  134. }
  135. else
  136. {
  137. ui->lblResolution->setText(tr("Plein écran"));
  138. }
  139. }
  140. void MainDialog::on_btnSaveSession_clicked()
  141. {
  142. RdpOptionsHelper::save(getRdpOptions());
  143. }
  144. void MainDialog::on_btnSaveAsSession_clicked()
  145. {
  146. on_btnSaveSession_clicked();
  147. }
  148. void MainDialog::on_btnOpenSession_clicked()
  149. {
  150. }
  151. void MainDialog::on_lineComputer_currentIndexChanged(int index)
  152. {
  153. setRdpOptions(m_rdpOptions.at(index));
  154. }