void SketchAreaWidget::createLayout() { m_toolbar = new QFrame(this); m_toolbar->setObjectName("sketchAreaToolbar"); m_toolbar->setFixedHeight(66); QFrame *leftButtons = new QFrame(m_toolbar); m_leftButtonsContainer = new QHBoxLayout(leftButtons); m_leftButtonsContainer->setMargin(0); m_leftButtonsContainer->setSpacing(0); QFrame *middleButtons = new QFrame(m_toolbar); middleButtons->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::MinimumExpanding); m_middleButtonsContainer = new QVBoxLayout(middleButtons); m_middleButtonsContainer->setSpacing(0); m_middleButtonsContainer->setMargin(0); QFrame *rightButtons = new QFrame(m_toolbar); m_rightButtonsContainer = new QHBoxLayout(rightButtons); m_rightButtonsContainer->setMargin(0); m_rightButtonsContainer->setSpacing(0); QHBoxLayout *toolbarLayout = new QHBoxLayout(m_toolbar); toolbarLayout->setMargin(0); toolbarLayout->setSpacing(0); toolbarLayout->addWidget(leftButtons); toolbarLayout->addWidget(middleButtons); toolbarLayout->addWidget(rightButtons); m_statusBarArea = new QFrame(this); m_statusBarArea->setObjectName("statusBarContainer"); QVBoxLayout *statusbarlayout = new QVBoxLayout(m_statusBarArea); statusbarlayout->setMargin(0); statusbarlayout->setSpacing(0); }
KompareListViewFrame::KompareListViewFrame( bool isSource, ViewSettings* settings, KompareSplitter* parent, const char* name ): QFrame ( parent ), m_view ( isSource, settings, this, name ), m_label ( isSource?"Source":"Dest", this ), m_layout ( this ) { setSizePolicy ( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored) ); m_label.setSizePolicy ( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed) ); QFrame *bottomLine = new QFrame(this); bottomLine->setFrameShape(QFrame::HLine); bottomLine->setFrameShadow ( QFrame::Plain ); bottomLine->setSizePolicy ( QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed) ); bottomLine->setFixedHeight(1); m_label.setMargin(3); m_layout.setSpacing(0); m_layout.setMargin(0); m_layout.addWidget(&m_label); m_layout.addWidget(bottomLine); m_layout.addWidget(&m_view); connect( &m_view, SIGNAL(differenceClicked(const Diff2::Difference*)), parent, SLOT(slotDifferenceClicked(const Diff2::Difference*)) ); connect( parent, SIGNAL(scrollViewsToId(int)), &m_view, SLOT(scrollToId(int)) ); connect( parent, SIGNAL(setXOffset(int)), &m_view, SLOT(setXOffset(int)) ); connect( &m_view, SIGNAL(resized()), parent, SLOT(slotUpdateScrollBars()) ); }
EventVideoDownloadsWindow::EventVideoDownloadsWindow(QWidget *parent) : QFrame(parent) { setAttribute(Qt::WA_DeleteOnClose, true); setMinimumSize(550, 300); setWindowTitle(tr("Bluecherry - Download Manager")); QVBoxLayout *layout = new QVBoxLayout(this); layout->setSpacing(2); layout->setMargin(2); QScrollArea *downloadArea = new QScrollArea(this); downloadArea->setBackgroundRole(QPalette::Base ); downloadArea->move(0, 0); layout->addWidget(downloadArea); QFrame *downloadFrame = new QFrame; downloadFrame->setBackgroundRole(QPalette::Base); downloadFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); m_downloadLayout = new QVBoxLayout(downloadFrame); m_downloadLayout->setDirection(QBoxLayout::Up); downloadArea->setWidget(downloadFrame); downloadArea->setWidgetResizable(true); QSettings settings; restoreGeometry(settings.value(QLatin1String("ui/downloadsWindow/geometry")).toByteArray()); connect(qApp, SIGNAL(aboutToQuit()), this, SLOT(saveSettings())); }
ImportPrivKeyDialog::ImportPrivKeyDialog(QWidget* parent) : QDialog(parent) , ui(new Ui::ImportPrivKeyDialog) { ui->setupUi(this); GUIUtil::setupPrivKeyWidget(ui->privKeyEdit, this); ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Ok")); ui->buttonBox->button(QDialogButtonBox::Ok)->setCursor(Qt::PointingHandCursor); ui->buttonBox->button(QDialogButtonBox::Ok)->setStyleSheet(GULDEN_DIALOG_CONFIRM_BUTTON_STYLE_NOMARGIN); ui->buttonBox->button(QDialogButtonBox::Reset)->setText(tr("Cancel")); ui->buttonBox->button(QDialogButtonBox::Reset)->setCursor(Qt::PointingHandCursor); ui->buttonBox->button(QDialogButtonBox::Reset)->setStyleSheet(GULDEN_DIALOG_CANCEL_BUTTON_STYLE_NOMARGIN); QObject::connect(ui->buttonBox->button(QDialogButtonBox::Reset), SIGNAL(clicked()), this, SLOT(reject())); QFrame* horizontalLine = new QFrame(this); horizontalLine->setFrameStyle(QFrame::HLine); horizontalLine->setFixedHeight(1); horizontalLine->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); horizontalLine->setStyleSheet(GULDEN_DIALOG_HLINE_STYLE_NOMARGIN); ui->verticalLayout->insertWidget(1, horizontalLine); setMinimumSize(300, 200); }
Line_separator::Line_separator( const QString& label, QWidget* parent, const char* name ) : QWidget( parent ) { if (name) setObjectName(name); QHBoxLayout* layout = new QHBoxLayout( this ); setLayout(layout); QLabel* separator_label = new QLabel( label, this ); QFont font; font.setBold( true ); separator_label->setFont( font ); QSizePolicy label_policy( QSizePolicy::Fixed, QSizePolicy::Fixed ); separator_label->setSizePolicy( label_policy ); QFrame* line = new QFrame( this); line->setFrameShape( QFrame::Box ); line->setFrameShadow( QFrame::Raised ); QSizePolicy line_policy( QSizePolicy::Expanding, QSizePolicy::Fixed ); line->setSizePolicy( line_policy ); layout->addWidget( separator_label ); layout->addWidget( line ); }
//! //! Constructor of the TimelinePanel class. //! //! \param parent The parent widget the created instance will be a child of. //! \param flags Extra widget options. //! TimelinePanel::TimelinePanel ( QWidget *parent /* = 0 */, Qt::WindowFlags flags /* = 0 */ ) : ViewPanel(ViewPanel::T_Timeline, parent, flags), m_scaleScrollBar(0), m_timelineWidget(0), m_controlToolBar(0) { setupUi(this); // create the timeline widget as a child of the scroll area m_timelineWidget = new TimelineWidget(ui_scrollArea); ui_scrollArea->setWidget(m_timelineWidget); // set up signal relay connections from the timeline widget connect(m_timelineWidget, SIGNAL(currentFrameSet(int)), SIGNAL(currentFrameSet(int))); connect(m_timelineWidget, SIGNAL(startFrameSet(int)), SIGNAL(startFrameSet(int))); connect(m_timelineWidget, SIGNAL(endFrameSet(int)), SIGNAL(endFrameSet(int))); connect(m_timelineWidget, SIGNAL(inFrameSet(int)), SIGNAL(inFrameSet(int))); connect(m_timelineWidget, SIGNAL(outFrameSet(int)), SIGNAL(outFrameSet(int))); // set up action connections connect(ui_autoScrollAction, SIGNAL(toggled(bool)), m_timelineWidget, SLOT(setAutoScroll(bool))); // create the tool bar for timeline controls m_controlToolBar = new QToolBar("Timeline Controls", this); m_controlToolBar->setStyleSheet( "QToolButton {" " max-height: 24px;" "}" ); ui_horizontalLayout->insertWidget(2, m_controlToolBar); // set the special value text for the frame step spin box to an empty string that is displayed instead of "1st" ui_frameStepSpinBox->setSpecialValueText(" "); // Give a little space to the keyframe widget QWidget *spacerWidget = new QWidget(); spacerWidget->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); spacerWidget->setMinimumHeight(5); spacerWidget->setMaximumHeight(5); ui_verticalLayout->insertWidget(0, spacerWidget); // insert border widget to ui_verticalLayout at index 1 just over toolbar vbox QString borderStyle ( "border-top: 1px solid #393939; border-bottom: 1px solid #959595" ); QFrame *borderFrame = new QFrame(this); borderFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); borderFrame->setMinimumHeight(2); borderFrame->setMaximumHeight(2); borderFrame->setStyleSheet(borderStyle); ui_verticalLayout->insertWidget(2, borderFrame); // insert border widget to ui_verticalLayout at index 1 just over toolbar vbox QFrame *borderFrame2 = new QFrame(this); borderFrame2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); borderFrame2->setMinimumHeight(2); borderFrame2->setMaximumHeight(2); borderFrame2->setStyleSheet(borderStyle); ui_verticalLayout->insertWidget(4, borderFrame2); }
QWidget * MainWindow::newHorizLine(QWidget *parent) { QFrame *frame = new QFrame(parent); frame->setFrameShape(QFrame::HLine); frame->setFrameShadow(QFrame::Sunken); frame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); return frame; }
// Create new frame widget QtWidgetObject* AtenTreeGuiDialog::addFrame(TreeGuiWidget* widget) { QtWidgetObject* qtwo = widgetObjects_.add(); QFrame *frame = new QFrame; QGridLayout *layout = addLayout(frame); qtwo->set(widget, frame, NULL, layout); frame->setEnabled(widget->enabled()); frame->setVisible(widget->visible()); frame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); return qtwo; }
FixFontsDialog::FixFontsDialog(QWidget *parent, const QSet<QString> fontsTofix) : QDialog(parent) { setWindowTitle(tr("Unavailable fonts")); QFrame *container = new QFrame(this); container->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Expanding); QVBoxLayout *layout = new QVBoxLayout(container); layout->setSpacing(1); layout->setMargin(1); foreach (QString f, fontsTofix) { DebugDialog::debug("incoming font " + f); }
QFrame * newLineWidget(const bool &pHorizontal, const QColor &pColor, QWidget *pParent) { // Create and return a 'real' line widget, i.e. one which is 1 pixel wide, // using a QFrame widget QFrame *res = new QFrame(pParent); res->setStyleSheet(QString("QFrame {" " border: 1px solid rgb(%1, %2, %3);" "}").arg(QString::number(pColor.red()), QString::number(pColor.green()), QString::number(pColor.blue()))); if (pHorizontal) { res->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); res->setFixedHeight(1); } else { res->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); res->setFixedWidth(1); } return res; }
void QILabelSeparator::init() { mLabel = new QLabel(); QFrame *separator = new QFrame(); separator->setFrameShape (QFrame::HLine); separator->setFrameShadow (QFrame::Sunken); separator->setEnabled (false); separator->setContentsMargins (0, 0, 0, 0); // separator->setStyleSheet ("QFrame {border: 1px outset black; }"); separator->setSizePolicy (QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); QHBoxLayout *pLayout = new QHBoxLayout (this); VBoxGlobal::setLayoutMargin (pLayout, 0); pLayout->addWidget (mLabel); pLayout->addWidget (separator, Qt::AlignBottom); }
bool ArkViewer::viewInInternalViewer(const QString& fileName, const KMimeType::Ptr& mimeType) { const KUrl fileUrl(fileName); setCaption(fileUrl.fileName()); restoreDialogSize(KGlobal::config()->group("Viewer")); QFrame *header = new QFrame(m_widget); QHBoxLayout *headerLayout = new QHBoxLayout(header); QLabel *iconLabel = new QLabel(header); headerLayout->addWidget(iconLabel); iconLabel->setPixmap(KIconLoader::global()->loadMimeTypeIcon(mimeType->iconName(), KIconLoader::Desktop)); iconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Minimum); KVBox *headerRight = new KVBox(header); headerLayout->addWidget(headerRight); new QLabel(QString(QLatin1String( "<qt><b>%1</b></qt>" )) .arg(fileUrl.fileName()), headerRight ); new QLabel(mimeType->comment(), headerRight); header->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); m_part = KMimeTypeTrader::self()->createPartInstanceFromQuery<KParts::ReadOnlyPart>(mimeType->name(), m_widget, this); if (!m_part.data()) { return false; } if (m_part.data()->browserExtension()) { connect(m_part.data()->browserExtension(), SIGNAL(openUrlRequestDelayed(KUrl,KParts::OpenUrlArguments,KParts::BrowserArguments)), SLOT(slotOpenUrlRequestDelayed(KUrl,KParts::OpenUrlArguments,KParts::BrowserArguments))); } m_part.data()->openUrl(fileUrl); return true; }
InstallApplicationWizardPrivate::choicePage::choicePage(QWidget *parent) : QWizardPage(parent) { setTitle(tr("Select configuration")); setSubTitle(tr("Select the wine configuration that wine will use for the installation process." " The new application will be installed in this configuration.")); QButtonGroup *group = new QButtonGroup(this); //### Radio buttons do not have word wrap so they need a \n every about 70 characters. QRadioButton *createRadio = new QRadioButton(tr("Create a new configuration" " (recommended if you\nwant to install a new windows application)"), this); QRadioButton *useRadio = new QRadioButton(tr("Use an existing configuration (use this if you want" " to install a\nsoftware patch, update, or an application that must cooperate with" "\nan already installed application, for example a plugin)"), this); group->addButton(createRadio); group->addButton(useRadio); createRadio->setChecked(true); QFrame *frame = new QFrame(this); QLabel *label = new QLabel(tr("Existing configuration to use:"), frame); //TODO validatePage() to check this!! ModelItemSelectComboBox *combo = new ModelItemSelectComboBox(ModelManager::ConfigurationsModel, frame); frame->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); QHBoxLayout *hlay = new QHBoxLayout(frame); hlay->addWidget(label); hlay->addWidget(combo); QVBoxLayout *vlay = new QVBoxLayout(this); vlay->addWidget(createRadio); vlay->addWidget(useRadio); vlay->addWidget(frame); frame->setEnabled(false); connect(useRadio, SIGNAL(toggled(bool)), frame, SLOT(setEnabled(bool)) ); registerField("CreateNewConfiguration", createRadio, "checked", SIGNAL(toggled(bool)) ); registerField("ConfigurationToUse", combo, "CurrentID", SIGNAL(currentIdChanged(quint16)) ); }
BtConfigDialog::BtConfigDialog(QWidget* parent) : QDialog(parent), m_maxItemWidth(0), m_previousPageIndex(-2) { setWindowFlags(Qt::Window); m_contentsList = new QListWidget(this); m_contentsList->setViewMode(QListView::IconMode); m_contentsList->setMovement(QListView::Static); m_contentsList->setSpacing(m_contentsList->spacing() + 10); //looks better m_pageWidget = new QStackedWidget(this); m_pageWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); QHBoxLayout *mainLayout = new QHBoxLayout; setLayout(mainLayout); mainLayout->addWidget(m_contentsList); m_pageLayout = new QVBoxLayout; mainLayout->addLayout(m_pageLayout); m_pageLayout->addWidget(m_pageWidget); // Horizontal line QFrame* line = new QFrame(); line->setGeometry(QRect(1, 1, 1, 3)); line->setFrameShape(QFrame::HLine); line->setFrameShadow(QFrame::Sunken); line->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_pageLayout->addWidget(line); connect(m_contentsList, SIGNAL(currentRowChanged(int)), this, SLOT(slotChangePage(int)) ); }
BitcoinGUI::BitcoinGUI(bool fIsTestnet, QWidget *parent) : QMainWindow(parent), clientModel(0), walletFrame(0), encryptWalletAction(0), changePassphraseAction(0), aboutQtAction(0), trayIcon(0), notificator(0), rpcConsole(0), prevBlocks(0), spinnerFrame(0) { GUIUtil::restoreWindowGeometry("nWindow", QSize(850, 550), this); QString windowTitle = tr("Bitcoin Core") + " - "; #ifdef ENABLE_WALLET /* if compiled with wallet support, -disablewallet can still disable the wallet */ bool enableWallet = !GetBoolArg("-disablewallet", false); #else bool enableWallet = false; #endif if(enableWallet) { windowTitle += tr("Wallet"); } else { windowTitle += tr("Node"); } if (!fIsTestnet) { #ifndef Q_OS_MAC QApplication::setWindowIcon(QIcon(":icons/bitcoin")); setWindowIcon(QIcon(":icons/bitcoin")); #else MacDockIconHandler::instance()->setIcon(QIcon(":icons/bitcoin")); #endif } else { windowTitle += " " + tr("[testnet]"); #ifndef Q_OS_MAC QApplication::setWindowIcon(QIcon(":icons/bitcoin_testnet")); setWindowIcon(QIcon(":icons/bitcoin_testnet")); #else MacDockIconHandler::instance()->setIcon(QIcon(":icons/bitcoin_testnet")); #endif } setWindowTitle(windowTitle); #if defined(Q_OS_MAC) && QT_VERSION < 0x050000 // This property is not implemented in Qt 5. Setting it has no effect. // A replacement API (QtMacUnifiedToolBar) is available in QtMacExtras. setUnifiedTitleAndToolBarOnMac(true); #endif rpcConsole = new RPCConsole(enableWallet ? this : 0); #ifdef ENABLE_WALLET if(enableWallet) { /** Create wallet frame and make it the central widget */ walletFrame = new WalletFrame(this); setCentralWidget(walletFrame); } else #endif { /* When compiled without wallet or -disablewallet is provided, * the central widget is the rpc console. */ setCentralWidget(rpcConsole); } // Accept D&D of URIs setAcceptDrops(true); // Create actions for the toolbar, menu bar and tray/dock icon // Needs walletFrame to be initialized createActions(fIsTestnet); // Create application menu bar createMenuBar(); // Create the toolbars createToolBars(); // Create system tray icon and notification createTrayIcon(fIsTestnet); // Create status bar statusBar(); // Status bar notification icons QFrame *frameBlocks = new QFrame(); frameBlocks->setContentsMargins(0,0,0,0); frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks); frameBlocksLayout->setContentsMargins(3,0,3,0); frameBlocksLayout->setSpacing(3); unitDisplayControl = new UnitDisplayStatusBarControl(); labelEncryptionIcon = new QLabel(); labelConnectionsIcon = new QLabel(); labelBlocksIcon = new QLabel(); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(unitDisplayControl); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelEncryptionIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelConnectionsIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelBlocksIcon); frameBlocksLayout->addStretch(); // Progress bar and label for blocks download progressBarLabel = new QLabel(); progressBarLabel->setVisible(false); progressBar = new QProgressBar(); progressBar->setAlignment(Qt::AlignCenter); progressBar->setVisible(false); // Override style sheet for progress bar for styles that have a segmented progress bar, // as they make the text unreadable (workaround for issue #1071) // See https://qt-project.org/doc/qt-4.8/gallery.html QString curStyle = QApplication::style()->metaObject()->className(); if(curStyle == "QWindowsStyle" || curStyle == "QWindowsXPStyle") { progressBar->setStyleSheet("QProgressBar { background-color: #e8e8e8; border: 1px solid grey; border-radius: 7px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #FF8000, stop: 1 orange); border-radius: 7px; margin: 0px; }"); } statusBar()->addWidget(progressBarLabel); statusBar()->addWidget(progressBar); statusBar()->addPermanentWidget(frameBlocks); connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(show())); // prevents an open debug window from becoming stuck/unusable on client shutdown connect(quitAction, SIGNAL(triggered()), rpcConsole, SLOT(hide())); // Install event filter to be able to catch status tip events (QEvent::StatusTip) this->installEventFilter(this); // Initially wallet actions should be disabled setWalletActionsEnabled(false); // Subscribe to notifications from core subscribeToCoreSignals(); }
AntialiasPopup::AntialiasPopup() : Dialog(TApp::instance()->getMainWindow(), true, false, "Antialias"), m_startRas(0) { setWindowTitle(tr("Apply Antialias")); setLabelWidth(0); setModal(false); setTopMargin(0); setTopSpacing(0); beginVLayout(); QSplitter *splitter = new QSplitter(Qt::Vertical); splitter->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); addWidget(splitter); endVLayout(); //------------------------- Top Layout -------------------------- QScrollArea *scrollArea = new QScrollArea(splitter); scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); scrollArea->setWidgetResizable(true); splitter->addWidget(scrollArea); splitter->setStretchFactor(0, 1); QFrame *topWidget = new QFrame(scrollArea); topWidget->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); scrollArea->setWidget(topWidget); QGridLayout *topLayout = new QGridLayout(this); topWidget->setLayout(topLayout); //------------------------- Parameters -------------------------- //Brightness QLabel *brightnessLabel = new QLabel(tr("Threshold:")); topLayout->addWidget(brightnessLabel, 0, 0, Qt::AlignRight | Qt::AlignVCenter); m_thresholdField = new DVGui::IntField(topWidget); m_thresholdField->setRange(0, 255); m_thresholdField->setValue(40); topLayout->addWidget(m_thresholdField, 0, 1); //Contrast QLabel *contrastLabel = new QLabel(tr("Softness:")); topLayout->addWidget(contrastLabel, 1, 0, Qt::AlignRight | Qt::AlignVCenter); m_softnessField = new DVGui::IntField(topWidget); m_softnessField->setRange(0, 100); m_softnessField->setValue(70); topLayout->addWidget(m_softnessField, 1, 1); topLayout->setRowStretch(2, 1); //--------------------------- Swatch ---------------------------- m_viewer = new Swatch(splitter); m_viewer->setMinimumHeight(150); m_viewer->setFocusPolicy(Qt::WheelFocus); splitter->addWidget(m_viewer); //--------------------------- Button ---------------------------- m_okBtn = new QPushButton(QString(tr("Apply")), this); connect(m_okBtn, SIGNAL(clicked()), this, SLOT(apply())); addButtonBarWidget(m_okBtn); //------------------------ Connections -------------------------- TApp *app = TApp::instance(); bool ret = true; ret = ret && connect(m_thresholdField, SIGNAL(valueChanged(bool)), this, SLOT(onValuesChanged(bool))); ret = ret && connect(m_softnessField, SIGNAL(valueChanged(bool)), this, SLOT(onValuesChanged(bool))); assert(ret); m_viewer->resize(0, 350); resize(600, 500); }
BitcoinGUI::BitcoinGUI(const NetworkStyle *networkStyle, QWidget *parent) : QMainWindow(parent), clientModel(0), walletFrame(0), unitDisplayControl(0), labelEncryptionIcon(0), labelConnectionsIcon(0), labelBlocksIcon(0), progressBarLabel(0), progressBar(0), progressDialog(0), appMenuBar(0), overviewAction(0), historyAction(0), quitAction(0), sendCoinsAction(0), usedSendingAddressesAction(0), usedReceivingAddressesAction(0), signMessageAction(0), verifyMessageAction(0), aboutAction(0), receiveCoinsAction(0), optionsAction(0), toggleHideAction(0), encryptWalletAction(0), backupWalletAction(0), changePassphraseAction(0), aboutQtAction(0), openRPCConsoleAction(0), openAction(0), showHelpMessageAction(0), trayIcon(0), trayIconMenu(0), notificator(0), rpcConsole(0), prevBlocks(0), spinnerFrame(0) { /* Open CSS when configured */ this->setStyleSheet(GUIUtil::loadStyleSheet()); GUIUtil::restoreWindowGeometry("nWindow", QSize(850, 550), this); QString windowTitle = tr("DarkNet Core") + " - "; #ifdef ENABLE_WALLET /* if compiled with wallet support, -disablewallet can still disable the wallet */ enableWallet = !GetBoolArg("-disablewallet", false); #else enableWallet = false; #endif // ENABLE_WALLET if(enableWallet) { windowTitle += tr("Wallet"); } else { windowTitle += tr("Node"); } QString userWindowTitle = QString::fromStdString(GetArg("-windowtitle", "")); if(!userWindowTitle.isEmpty()) windowTitle += " - " + userWindowTitle; windowTitle += " " + networkStyle->getTitleAddText(); #ifndef Q_OS_MAC QApplication::setWindowIcon(networkStyle->getAppIcon()); setWindowIcon(networkStyle->getAppIcon()); #else MacDockIconHandler::instance()->setIcon(networkStyle->getAppIcon()); #endif setWindowTitle(windowTitle); #if defined(Q_OS_MAC) && QT_VERSION < 0x050000 // This property is not implemented in Qt 5. Setting it has no effect. // A replacement API (QtMacUnifiedToolBar) is available in QtMacExtras. setUnifiedTitleAndToolBarOnMac(true); #endif rpcConsole = new RPCConsole(enableWallet ? this : 0); #ifdef ENABLE_WALLET if(enableWallet) { /** Create wallet frame*/ walletFrame = new WalletFrame(this); } else #endif // ENABLE_WALLET { /* When compiled without wallet or -disablewallet is provided, * the central widget is the rpc console. */ setCentralWidget(rpcConsole); } // Accept D&D of URIs setAcceptDrops(true); // Create actions for the toolbar, menu bar and tray/dock icon // Needs walletFrame to be initialized createActions(networkStyle); // Create application menu bar createMenuBar(); // Create the toolbars createToolBars(); // Create system tray icon and notification createTrayIcon(networkStyle); // Create status bar statusBar(); // Status bar notification icons QFrame *frameBlocks = new QFrame(); frameBlocks->setContentsMargins(0,0,0,0); frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks); frameBlocksLayout->setContentsMargins(3,0,3,0); frameBlocksLayout->setSpacing(3); unitDisplayControl = new UnitDisplayStatusBarControl(); labelEncryptionIcon = new QLabel(); labelConnectionsIcon = new QPushButton(); labelConnectionsIcon->setFlat(true); // Make the button look like a label, but clickable labelConnectionsIcon->setStyleSheet(".QPushButton { background-color: rgba(255, 255, 255, 0);}"); labelConnectionsIcon->setMaximumSize(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE); labelBlocksIcon = new QLabel(); if(enableWallet) { frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(unitDisplayControl); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelEncryptionIcon); } frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelConnectionsIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelBlocksIcon); frameBlocksLayout->addStretch(); // Progress bar and label for blocks download progressBarLabel = new QLabel(); progressBarLabel->setVisible(true); progressBar = new GUIUtil::ProgressBar(); progressBar->setAlignment(Qt::AlignCenter); progressBar->setVisible(true); // Override style sheet for progress bar for styles that have a segmented progress bar, // as they make the text unreadable (workaround for issue #1071) // See https://qt-project.org/doc/qt-4.8/gallery.html QString curStyle = QApplication::style()->metaObject()->className(); if(curStyle == "QWindowsStyle" || curStyle == "QWindowsXPStyle") { progressBar->setStyleSheet("QProgressBar { background-color: #F8F8F8; border: 1px solid grey; border-radius: 7px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #00CCFF, stop: 1 #33CCFF); border-radius: 7px; margin: 0px; }"); } statusBar()->addWidget(progressBarLabel); statusBar()->addWidget(progressBar); statusBar()->addPermanentWidget(frameBlocks); // Jump directly to tabs in RPC-console connect(openInfoAction, SIGNAL(triggered()), rpcConsole, SLOT(showInfo())); connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(showConsole())); connect(openNetworkAction, SIGNAL(triggered()), rpcConsole, SLOT(showNetwork())); connect(openPeersAction, SIGNAL(triggered()), rpcConsole, SLOT(showPeers())); connect(openRepairAction, SIGNAL(triggered()), rpcConsole, SLOT(showRepair())); connect(openConfEditorAction, SIGNAL(triggered()), rpcConsole, SLOT(showConfEditor())); connect(showBackupsAction, SIGNAL(triggered()), rpcConsole, SLOT(showBackups())); connect(labelConnectionsIcon, SIGNAL(clicked()), rpcConsole, SLOT(showPeers())); // Get restart command-line parameters and handle restart connect(rpcConsole, SIGNAL(handleRestart(QStringList)), this, SLOT(handleRestart(QStringList))); // prevents an open debug window from becoming stuck/unusable on client shutdown connect(quitAction, SIGNAL(triggered()), rpcConsole, SLOT(hide())); // Install event filter to be able to catch status tip events (QEvent::StatusTip) this->installEventFilter(this); // Initially wallet actions should be disabled setWalletActionsEnabled(false); // Subscribe to notifications from core subscribeToCoreSignals(); }
BitcoinGUI::BitcoinGUI(const PlatformStyle *_platformStyle, const NetworkStyle *networkStyle, QWidget *parent) : QMainWindow(parent), enableWallet(false), clientModel(0), walletFrame(0), unitDisplayControl(0), labelWalletEncryptionIcon(0), labelWalletHDStatusIcon(0), labelConnectionsIcon(0), labelBlocksIcon(0), progressBarLabel(0), progressBar(0), progressDialog(0), appMenuBar(0), overviewAction(0), historyAction(0), quitAction(0), sendCoinsAction(0), sendCoinsMenuAction(0), usedSendingAddressesAction(0), usedReceivingAddressesAction(0), signMessageAction(0), verifyMessageAction(0), aboutAction(0), receiveCoinsAction(0), receiveCoinsMenuAction(0), optionsAction(0), toggleHideAction(0), encryptWalletAction(0), backupWalletAction(0), changePassphraseAction(0), aboutQtAction(0), openRPCConsoleAction(0), openAction(0), showHelpMessageAction(0), trayIcon(0), trayIconMenu(0), notificator(0), rpcConsole(0), helpMessageDialog(0), modalOverlay(0), prevBlocks(0), spinnerFrame(0), platformStyle(_platformStyle) { GUIUtil::restoreWindowGeometry("nWindow", QSize(850, 550), this); QString windowTitle = tr(PACKAGE_NAME) + " - "; #ifdef ENABLE_WALLET enableWallet = WalletModel::isWalletEnabled(); #endif // ENABLE_WALLET if(enableWallet) { windowTitle += tr("Wallet"); } else { windowTitle += tr("Node"); } windowTitle += " " + networkStyle->getTitleAddText(); #ifndef Q_OS_MAC QApplication::setWindowIcon(networkStyle->getTrayAndWindowIcon()); setWindowIcon(networkStyle->getTrayAndWindowIcon()); #else MacDockIconHandler::instance()->setIcon(networkStyle->getAppIcon()); #endif setWindowTitle(windowTitle); #if defined(Q_OS_MAC) && QT_VERSION < 0x050000 // This property is not implemented in Qt 5. Setting it has no effect. // A replacement API (QtMacUnifiedToolBar) is available in QtMacExtras. setUnifiedTitleAndToolBarOnMac(true); #endif rpcConsole = new RPCConsole(_platformStyle, 0); helpMessageDialog = new HelpMessageDialog(this, false); #ifdef ENABLE_WALLET if(enableWallet) { /** Create wallet frame and make it the central widget */ walletFrame = new WalletFrame(_platformStyle, this); setCentralWidget(walletFrame); } else #endif // ENABLE_WALLET { /* When compiled without wallet or -disablewallet is provided, * the central widget is the rpc console. */ setCentralWidget(rpcConsole); } // Accept D&D of URIs setAcceptDrops(true); // Create actions for the toolbar, menu bar and tray/dock icon // Needs walletFrame to be initialized createActions(); // Create application menu bar createMenuBar(); // Create the toolbars createToolBars(); // Create system tray icon and notification createTrayIcon(networkStyle); // Create status bar statusBar(); // Disable size grip because it looks ugly and nobody needs it statusBar()->setSizeGripEnabled(false); // Status bar notification icons QFrame *frameBlocks = new QFrame(); frameBlocks->setContentsMargins(0,0,0,0); frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks); frameBlocksLayout->setContentsMargins(3,0,3,0); frameBlocksLayout->setSpacing(3); unitDisplayControl = new UnitDisplayStatusBarControl(platformStyle); labelWalletEncryptionIcon = new QLabel(); labelWalletHDStatusIcon = new QLabel(); labelConnectionsIcon = new QLabel(); labelBlocksIcon = new QLabel(); if(enableWallet) { frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(unitDisplayControl); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelWalletEncryptionIcon); frameBlocksLayout->addWidget(labelWalletHDStatusIcon); } frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelConnectionsIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelBlocksIcon); frameBlocksLayout->addStretch(); // Progress bar and label for blocks download progressBarLabel = new QLabel(); progressBarLabel->setVisible(false); progressBar = new GUIUtil::ProgressBar(); progressBar->setAlignment(Qt::AlignCenter); progressBar->setVisible(false); // Override style sheet for progress bar for styles that have a segmented progress bar, // as they make the text unreadable (workaround for issue #1071) // See https://qt-project.org/doc/qt-4.8/gallery.html QString curStyle = QApplication::style()->metaObject()->className(); if(curStyle == "QWindowsStyle" || curStyle == "QWindowsXPStyle") { progressBar->setStyleSheet("QProgressBar { background-color: #e8e8e8; border: 1px solid grey; border-radius: 7px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #FF8000, stop: 1 orange); border-radius: 7px; margin: 0px; }"); } statusBar()->addWidget(progressBarLabel); statusBar()->addWidget(progressBar); statusBar()->addPermanentWidget(frameBlocks); // Install event filter to be able to catch status tip events (QEvent::StatusTip) this->installEventFilter(this); // Initially wallet actions should be disabled setWalletActionsEnabled(false); // Subscribe to notifications from core subscribeToCoreSignals(); modalOverlay = new ModalOverlay(this->centralWidget()); #ifdef ENABLE_WALLET if(enableWallet) connect(walletFrame, SIGNAL(requestedSyncWarningInfo()), this, SLOT(showModalOverlay())); #endif }
MainWindow::MainWindow(QWidget *parent, const char *title, const QSize &size, const char *path) : QMainWindow(parent), _status(statusBar()), _panelManager(new PanelManager()), _watcher(new QFutureWatcher<void>(this)) { /* Window setup. */ setWindowTitle(title); resize(size); /* Actions. */ _actionOpenDirectory = new QAction(this); _actionOpenFile = new QAction(this); _actionClose = new QAction(this); _actionQuit = new QAction(this); _actionAbout = new QAction(this); _actionOpenDirectory->setText(tr("&Open directory")); _actionOpenDirectory->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O)); _actionOpenFile->setText(tr("Open &file")); _actionClose->setText(tr("&Close")); _actionClose->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_W)); _actionQuit->setText(tr("&Quit")); _actionQuit->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q)); _actionAbout->setText(tr("&About")); _actionAbout->setShortcut(QKeySequence(Qt::Key_F1)); /* Menu. */ _menuBar = new QMenuBar(this); _menuFile = new QMenu(_menuBar); _menuHelp = new QMenu(_menuBar); _menuBar->addAction(_menuFile->menuAction()); _menuBar->addAction(_menuHelp->menuAction()); _menuFile->addAction(_actionOpenDirectory); _menuFile->addAction(_actionOpenFile); _menuFile->addSeparator(); _menuFile->addAction(_actionClose); _menuFile->addSeparator(); _menuFile->addAction(_actionQuit); _menuFile->setTitle("&File"); _menuHelp->addAction(_actionAbout); _menuHelp->setTitle("&Help"); setMenuBar(_menuBar); /* Slots. */ QObject::connect(_actionOpenDirectory, &QAction::triggered, this, &MainWindow::slotOpenDirectory); QObject::connect(_actionOpenFile, &QAction::triggered, this, &MainWindow::slotOpenFile); QObject::connect(_actionClose, &QAction::triggered, this, &MainWindow::slotClose); QObject::connect(_actionQuit, &QAction::triggered, this, &MainWindow::slotQuit); QObject::connect(_actionAbout, &QAction::triggered, this, &MainWindow::slotAbout); /* Layout. */ _centralWidget = new QWidget(this); _centralLayout = new QGridLayout(_centralWidget); _splitterTopBottom = new QSplitter(_centralWidget); _splitterLeftRight = new QSplitter(_splitterTopBottom); _treeView = new QTreeView(_splitterLeftRight); QGroupBox *logBox = new QGroupBox(_splitterTopBottom); QWidget *previewWrapper = new QWidget(_splitterTopBottom); // Can't add a layout directly to a splitter. QVBoxLayout *previewWrapperLayout = new QVBoxLayout(previewWrapper); QFrame *resInfoFrame = new QFrame(previewWrapper); _resPreviewFrame = new QFrame(previewWrapper); _log = new QTextEdit(logBox); _log->setReadOnly(true); // Tree // 1:8 ratio; tree:preview/log { QSizePolicy sp(QSizePolicy::Expanding, QSizePolicy::Preferred); sp.setHorizontalStretch(1); _treeView->setSizePolicy(sp); } // Preview wrapper previewWrapper->setLayout(previewWrapperLayout); previewWrapper->setContentsMargins(0, 0, 0, 0); previewWrapperLayout->setParent(previewWrapper); previewWrapperLayout->setMargin(0); previewWrapperLayout->addWidget(resInfoFrame); previewWrapperLayout->addWidget(_resPreviewFrame); { QSizePolicy sp(QSizePolicy::Expanding, QSizePolicy::Preferred); sp.setHorizontalStretch(6); previewWrapper->setSizePolicy(sp); } // Log logBox->setTitle(tr("Log")); { QSizePolicy sp(QSizePolicy::Preferred, QSizePolicy::Preferred); sp.setVerticalStretch(1); logBox->setSizePolicy(sp); QHBoxLayout *hl = new QHBoxLayout(logBox); hl->addWidget(_log); hl->setContentsMargins(0, 5, 0, 0); } // Left/right splitter // 8:1 ratio, preview:log _splitterLeftRight->addWidget(_treeView); _splitterLeftRight->addWidget(previewWrapper); { QSizePolicy sp(QSizePolicy::Expanding, QSizePolicy::Preferred); sp.setVerticalStretch(5); _splitterLeftRight->setSizePolicy(sp); } // Top/bottom splitter _splitterTopBottom->setOrientation(Qt::Vertical); _splitterTopBottom->addWidget(_splitterLeftRight); _splitterTopBottom->addWidget(logBox); // Resource info frame _panelManager->registerPanel(new PanelPreviewEmpty(nullptr), Aurora::kResourceNone); _panelManager->registerPanel(new PanelPreviewSound(nullptr), Aurora::kResourceSound); _panelManager->registerPanel(new PanelPreviewImage(nullptr), Aurora::kResourceImage); _panelManager->registerPanel(new PanelPreviewText(nullptr), Aurora::kResourceText); _panelManager->registerPanel(new PanelPreviewTable(nullptr), Aurora::kResourceTable); _panelManager->setItem(nullptr); PanelPreviewText *textPanel = static_cast<PanelPreviewText *>(_panelManager->getPanelByType(Aurora::kResourceText)); PanelPreviewTable *tablePanel = static_cast<PanelPreviewTable *>(_panelManager->getPanelByType(Aurora::kResourceTable)); QObject::connect(textPanel, &PanelPreviewText::log, this, &MainWindow::slotLog); QObject::connect(tablePanel, &PanelPreviewTable::log, this, &MainWindow::slotLog); _panelResourceInfo = new PanelResourceInfo(this); QObject::connect(_panelResourceInfo, &PanelResourceInfo::closeDirClicked, this, &MainWindow::slotClose); QObject::connect(_panelResourceInfo, &PanelResourceInfo::saveClicked, this, &MainWindow::saveItem); QObject::connect(_panelResourceInfo, &PanelResourceInfo::exportTGAClicked, this, &MainWindow::exportTGA); QObject::connect(_panelResourceInfo, &PanelResourceInfo::exportBMUMP3Clicked, this, &MainWindow::exportBMUMP3); QObject::connect(_panelResourceInfo, &PanelResourceInfo::exportWAVClicked, this, &MainWindow::exportWAV); QObject::connect(_panelResourceInfo, &PanelResourceInfo::log, this, &MainWindow::slotLog); resInfoFrame->setFrameShape(QFrame::StyledPanel); resInfoFrame->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed)); resInfoFrame->setFixedHeight(140); { QHBoxLayout *hl = new QHBoxLayout(resInfoFrame); hl->addWidget(_panelResourceInfo); } // Resource preview frame _resPreviewFrame->setFrameShape(QFrame::StyledPanel); { QHBoxLayout *hl = new QHBoxLayout(_resPreviewFrame); hl->setMargin(0); _panelManager->setLayout(hl); } setCentralWidget(_centralWidget); _centralLayout->addWidget(_splitterTopBottom); /* Open path. */ const QString qpath = QString::fromUtf8(path); _treeModel = std::make_unique<ResourceTree>(this, _treeView); _proxyModel = std::make_unique<ProxyModel>(this); _panelManager->setItem(nullptr); _status.setText("Idle..."); if (qpath.isEmpty()) _actionClose->setEnabled(false); else open(qpath); }
//! //! Constructor of the PanelFrame class. //! //! \param panelType The type of the panel to create. //! \param parent A widget the created instance will be child of. //! \param flags Extra widget options. //! \param showToolBars Flag to control whether to display tool bars in the panel frame. //! PanelFrame::PanelFrame ( Panel::Type panelType, QWidget *parent /* = 0 */, Qt::WindowFlags flags /* = 0 */, bool showToolBars /* = 0 */ ) : QFrame(parent, flags), m_mainToolBar(0), m_panelToolBar(0), m_panelType(Panel::T_Uninitialized), m_panel(0), m_label(0) { // create gui elements defined in the Ui_Panel class setupUi(this); setFrameShape(QFrame::Panel); setFrameShadow(QFrame::Plain); // set the style sheet to use for tool bars /* QString toolBarStyleSheet ( "QToolBar {" " border: none;" " margin: 0px;" " spacing: 1px;" "}" "QToolBar::separator {" " width: 6px;" " background-image: url(:/toolbarSeparatorIcon);" " background-repeat: no-repeat;" " background-origin: content;" " background-position: center center;" "}" "QToolButton {" " max-height: 22px;" " max-width: 22px;" "}" "QToolButton[popupMode=\"1\"] {" " max-width: 32px;" "}" ); QString frameStyleSheet ( "QFrame {" " border: 1px solid #737373;" " background: #595959;" "}" ); setStyleSheet(frameStyleSheet); */ // create the panel's main tool bar m_mainToolBar = new QToolBar(this); m_mainToolBar->setToolButtonStyle(Qt::ToolButtonIconOnly); m_mainToolBar->setIconSize(QSize(16, 16)); m_mainToolBar->setMinimumHeight(18); m_mainToolBar->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); // m_mainToolBar->setStyleSheet(toolBarStyleSheet); // create the panel's main tool bar m_panelToolBar = new QToolBar(this); m_panelToolBar->setToolButtonStyle(Qt::ToolButtonIconOnly); m_panelToolBar->setIconSize(QSize(16, 16)); m_panelToolBar->setMinimumHeight(18); m_panelToolBar->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); // m_panelToolBar->setStyleSheet(toolBarStyleSheet); if (!showToolBars) { m_mainToolBar->hide(); m_panelToolBar->hide(); ui_panelTypeComboBox->hide(); //ui_vboxLayout->removeItem(ui_hboxLayout); } // insert the panel's main tool bar after the spacer behind the panel type combo box // Give a little space to the keyframe widget QWidget *spacerWidget = new QWidget(); spacerWidget->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); spacerWidget->setMinimumWidth(5); spacerWidget->setMaximumWidth(5); ui_hboxLayout->insertWidget(0, spacerWidget); ui_hboxLayout->insertWidget(3, m_mainToolBar); ui_hboxLayout->insertWidget(4, m_panelToolBar); // fill panel type combo box with panel type names ui_panelTypeComboBox->blockSignals(true); for (int i = 0; i < Panel::T_NumTypes; ++i) { Panel::Type panelType = (Panel::Type) i; QString panelTypeName = Panel::getTypeName(panelType); QString panelTypeIconName = Panel::getTypeIconName(panelType); if (panelTypeIconName.isEmpty()) ui_panelTypeComboBox->addItem(panelTypeName); else ui_panelTypeComboBox->addItem(QIcon(panelTypeIconName), panelTypeName); } // fill the panel type combo box with dynamic type names for(int i = 0; i < PanelFactory::m_panelTypeMap.keys().length(); ++i){ QString PlugInName = PanelFactory::m_panelPluginNames.at(i); QIcon PlugInIcon = QIcon(PanelFactory::m_panelPluginIcons.at(i)); ui_panelTypeComboBox->addItem(PlugInIcon, PlugInName); } ui_panelTypeComboBox->blockSignals(false); // relay the viewPanelCreated signal to the window that this panel frame is contained in connect(this, SIGNAL(viewPanelCreated(ViewPanel *)), window(), SIGNAL(viewPanelCreated(ViewPanel *))); // initialize the panel frame's panel type setPanelType(panelType); // create the panel drop-down menu QMenu *panelMenu = new QMenu("Panel Menu", this); panelMenu->addAction(ui_splitHorizontallyAction); panelMenu->addAction(ui_splitVerticallyAction); panelMenu->addSeparator(); panelMenu->addAction(ui_maximizeAction); panelMenu->addAction(ui_restoreAction); panelMenu->addAction(ui_maximizeHorizontallyAction); panelMenu->addAction(ui_restoreHorizontallyAction); panelMenu->addAction(ui_maximizeVerticallyAction); panelMenu->addAction(ui_restoreVerticallyAction); panelMenu->addAction(ui_minimizeAction); panelMenu->addSeparator(); panelMenu->addAction(ui_maximizeRowAction); panelMenu->addAction(ui_minimizeRowAction); panelMenu->addAction(ui_maximizeColumnAction); panelMenu->addAction(ui_minimizeColumnAction); panelMenu->addSeparator(); panelMenu->addAction(ui_duplicateAction); panelMenu->addAction(ui_extractAction); panelMenu->addSeparator(); panelMenu->addAction(ui_closeRowAction); panelMenu->addAction(ui_closeColumnAction); panelMenu->addAction(ui_closeAction); ui_panelMenuAction->setMenu(panelMenu); ui_maximizeAction->setVisible(false); ui_restoreAction->setVisible(false); ui_maximizeHorizontallyAction->setVisible(false); ui_restoreHorizontallyAction->setVisible(false); ui_maximizeVerticallyAction->setVisible(false); ui_restoreVerticallyAction->setVisible(false); ui_maximizeColumnAction->setVisible(false); ui_minimizeColumnAction->setVisible(false); ui_maximizeRowAction->setVisible(false); ui_minimizeRowAction->setVisible(false); ui_closeRowAction->setVisible(false); ui_closeColumnAction->setVisible(false); // set up external signal/slot connections connect(this, SIGNAL(panelTypeChanged(const QString &)), window(), SLOT(updateWindowTitle(const QString &))); connect(this, SIGNAL(duplicateRequested(PanelFrame *)), window(), SLOT(duplicatePanelFrame(PanelFrame *))); connect(this, SIGNAL(extractRequested(PanelFrame *)), window(), SLOT(extractPanelFrame(PanelFrame *)), Qt::QueuedConnection); connect(this, SIGNAL(closeRequested(PanelFrame *)), window(), SLOT(closePanelFrame(PanelFrame *)), Qt::QueuedConnection); // insert border widget to ui_vboxLayout at index 1 just after toolbar vbox QString borderStyle ( "border-top: 1px solid #393939; border-bottom: 1px solid #959595" ); QFrame *borderFrame = new QFrame(this); borderFrame->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); borderFrame->setMinimumHeight(2); borderFrame->setMaximumHeight(2); borderFrame->setStyleSheet(borderStyle); ui_vboxLayout->insertWidget(1, borderFrame); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), logNewMessages(0), logHasErrors(false), showNewLogNumber(true) { ui->setupUi(this); setWindowIcon(QIcon(c_icon_app)); setWindowTitle(c_qtau_name); setAcceptDrops(true); setContextMenuPolicy(Qt::NoContextMenu); //----------------------------------------- QLabel *meterLabel = new QLabel(QString("%1/%2") .arg(ns.notesInBar).arg(ns.noteLength), this); QLabel *tempoLabel = new QLabel(QString("%1 %2").arg(ns.tempo).arg(tr("bpm")), this); QHBoxLayout *bpmHBL = new QHBoxLayout(); bpmHBL->setContentsMargins(0,0,0,0); bpmHBL->addSpacing(5); bpmHBL->addWidget(meterLabel); bpmHBL->addWidget(tempoLabel); bpmHBL->addSpacing(5); QFrame *tempoPanel = new QFrame(this); tempoPanel->setMinimumSize(c_piano_min_width, c_meter_min_height); tempoPanel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); tempoPanel->setContentsMargins(1,0,1,1); tempoPanel->setFrameStyle(QFrame::Panel | QFrame::Raised); tempoPanel->setLayout(bpmHBL); meter = new qtauMeterBar(this); meter->setMinimumHeight(c_meter_min_height); meter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); meter->setContentsMargins(0,0,0,0); piano = new qtauPiano(ui->centralWidget); piano->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); piano->setMinimumSize(c_piano_min_width, c_piano_min_height); piano->setContentsMargins(0,0,0,0); zoom = new QSlider(Qt::Horizontal, ui->centralWidget); zoom->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); zoom->setRange(0, c_zoom_num - 1); zoom->setSingleStep(1); zoom->setPageStep(1); zoom->setValue(cdef_zoom_index); zoom->setMinimumWidth(c_piano_min_width); zoom->setGeometry(0,0,c_piano_min_width,10); zoom->setContentsMargins(0,0,0,0); noteEditor = new qtauNoteEditor(ui->centralWidget); noteEditor->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); noteEditor->setContentsMargins(0,0,0,0); hscr = new QScrollBar(Qt::Horizontal, ui->centralWidget); vscr = new QScrollBar(Qt::Vertical, ui->centralWidget); hscr->setContentsMargins(0,0,0,0); vscr->setContentsMargins(0,0,0,0); hscr->setRange(0, ns.note.width() * ns.notesInBar * cdef_bars); vscr->setRange(0, ns.note.height() * 12 * ns.numOctaves); hscr->setSingleStep(ns.note.width()); vscr->setSingleStep(ns.note.height()); hscr->setContextMenuPolicy(Qt::NoContextMenu); vscr->setContextMenuPolicy(Qt::NoContextMenu); //---- vocal and music waveform panels, hidden until synthesized (vocal wave) and/or loaded (music wave) QScrollBar *dummySB = new QScrollBar(this); dummySB->setOrientation(Qt::Vertical); dummySB->setRange(0,0); dummySB->setEnabled(false); QFrame *vocalControls = new QFrame(this); vocalControls->setContentsMargins(0,0,0,0); vocalControls->setMinimumSize(c_piano_min_width, c_waveform_min_height); vocalControls->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); vocalControls->setFrameStyle(QFrame::Panel | QFrame::Raised); vocalWave = new qtauWaveform(this); vocalWave->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); vocalWave->setMinimumHeight(c_waveform_min_height); vocalWave->setContentsMargins(0,0,0,0); QHBoxLayout *vocalWaveL = new QHBoxLayout(); vocalWaveL->setContentsMargins(0,0,0,0); vocalWaveL->setSpacing(0); vocalWaveL->addWidget(vocalControls); vocalWaveL->addWidget(vocalWave); vocalWaveL->addWidget(dummySB); vocalWavePanel = new QWidget(this); vocalWavePanel->setContentsMargins(0,0,0,0); vocalWavePanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); vocalWavePanel->setLayout(vocalWaveL); vocalWavePanel->setVisible(false); //--------- QScrollBar *dummySB2 = new QScrollBar(this); dummySB2->setOrientation(Qt::Vertical); dummySB2->setRange(0,0); dummySB2->setEnabled(false); QFrame *musicControls = new QFrame(this); musicControls->setContentsMargins(0,0,0,0); musicControls->setMinimumSize(c_piano_min_width, c_waveform_min_height); musicControls->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); musicControls->setFrameStyle(QFrame::Panel | QFrame::Raised); musicWave = new qtauWaveform(this); musicWave->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); musicWave->setMinimumHeight(c_waveform_min_height); musicWave->setContentsMargins(0,0,0,0); QHBoxLayout *musicWaveL = new QHBoxLayout(); musicWaveL->setContentsMargins(0,0,0,0); musicWaveL->setSpacing(0); musicWaveL->addWidget(musicControls); musicWaveL->addWidget(musicWave); musicWaveL->addWidget(dummySB2); musicWavePanel = new QWidget(this); musicWavePanel->setContentsMargins(0,0,0,0); musicWavePanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); musicWavePanel->setLayout(musicWaveL); musicWavePanel->setVisible(false); //---- notes' dynamics setup area -------------- QGridLayout *dynBtnL = new QGridLayout(); QString btnNames[c_dynbuttons_num] = {"VEL", "DYN", "BRE", "BRI", "CLE", "OPE", "GEN", "POR", "PIT", "PBS"}; for (int i = 0; i < c_dynbuttons_num; ++i) { qtauDynLabel *l = new qtauDynLabel(btnNames[i], this); l->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); dynBtnL->addWidget(l, i / 2, i % 2, 1, 1); l->setStyleSheet(c_dynlbl_css_off); l->setFrameStyle(QFrame::Box); l->setLineWidth(1); connect(l, SIGNAL(leftClicked()), SLOT(dynBtnLClicked())); connect(l, SIGNAL(rightClicked()), SLOT(dynBtnRClicked())); } dynBtnL->setRowStretch(c_dynbuttons_num / 2, 100); QFrame *dynBtnPanel = new QFrame(this); dynBtnPanel->setContentsMargins(0,0,0,0); dynBtnPanel->setMinimumSize(c_piano_min_width, c_drawzone_min_height); dynBtnPanel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); dynBtnPanel->setFrameStyle(QFrame::Panel | QFrame::Raised); dynBtnPanel->setLayout(dynBtnL); drawZone = new qtauDynDrawer(ui->centralWidget); drawZone->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); drawZone->setMinimumHeight(c_drawzone_min_height); drawZone->setContentsMargins(0,0,0,0); QScrollBar *dummySB3 = new QScrollBar(this); dummySB3->setOrientation(Qt::Vertical); dummySB3->setRange(0,0); dummySB3->setEnabled(false); QHBoxLayout *singParamsL = new QHBoxLayout(); singParamsL->setContentsMargins(0,0,0,0); singParamsL->setSpacing(0); singParamsL->addWidget(dynBtnPanel); singParamsL->addWidget(drawZone); singParamsL->addWidget(dummySB3); drawZonePanel = new QWidget(this); drawZonePanel->setContentsMargins(0,0,0,0); drawZonePanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); drawZonePanel->setLayout(singParamsL); //---- Combining editor panels into hi-level layout ------ QGridLayout *gl = new QGridLayout(); gl->setContentsMargins(0,0,0,0); gl->setSpacing(0); gl->addWidget(tempoPanel, 0, 0, 1, 1); gl->addWidget(meter, 0, 1, 1, 1); gl->addWidget(piano, 1, 0, 1, 1); gl->addWidget(zoom, 2, 0, 1, 1); gl->addWidget(noteEditor, 1, 1, 1, 1); gl->addWidget(hscr, 2, 1, 1, 1); gl->addWidget(vscr, 1, 2, 1, 1); QWidget *editorUpperPanel = new QWidget(this); editorUpperPanel->setContentsMargins(0,0,0,0); editorUpperPanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); editorUpperPanel->setMaximumSize(9000,9000); editorUpperPanel->setLayout(gl); editorSplitter = new QSplitter(Qt::Vertical, this); editorSplitter->setContentsMargins(0,0,0,0); editorSplitter->addWidget(editorUpperPanel); editorSplitter->addWidget(vocalWavePanel); editorSplitter->addWidget(musicWavePanel); editorSplitter->addWidget(drawZonePanel); editorSplitter->setStretchFactor(0, 1); editorSplitter->setStretchFactor(1, 0); editorSplitter->setStretchFactor(2, 0); editorSplitter->setStretchFactor(3, 0); QVBoxLayout *edVBL = new QVBoxLayout(); edVBL->setContentsMargins(0,0,0,0); edVBL->addWidget(editorSplitter); QWidget *editorPanel = new QWidget(this); editorPanel->setContentsMargins(0,0,0,0); editorPanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); editorPanel->setMaximumSize(9000,9000); editorPanel->setLayout(edVBL); //---- Voicebank setup tab --------------------- QWidget *voicesPanel = new QWidget(this); voicesPanel->setContentsMargins(0,0,0,0); voicesPanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); voicesPanel->setMaximumSize(9000,9000); //---- Plugins setup tab ----------------------- QWidget *pluginsPanel = new QWidget(this); pluginsPanel->setContentsMargins(0,0,0,0); pluginsPanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); pluginsPanel->setMaximumSize(9000,9000); //---- Settings tab ---------------------------- QWidget *settingsPanel = new QWidget(this); settingsPanel->setContentsMargins(0,0,0,0); settingsPanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); settingsPanel->setMaximumSize(9000,9000); //---- Documentation tab ----------------------- QWidget *docsPanel = new QWidget(this); docsPanel->setContentsMargins(0,0,0,0); docsPanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); docsPanel->setMaximumSize(9000,9000); QTextEdit *docpad = new QTextEdit(this); docpad->setReadOnly(true); docpad->setUndoRedoEnabled(false); docpad->setContextMenuPolicy(Qt::NoContextMenu); QFile embeddedDocTxt(c_doc_txt); if (embeddedDocTxt.open(QFile::ReadOnly)) { QTextStream ts(&embeddedDocTxt); ts.setAutoDetectUnicode(true); ts.setCodec("UTF-8"); docpad->setText(ts.readAll()); embeddedDocTxt.close(); } QGridLayout *docL = new QGridLayout(); docL->setContentsMargins(0,0,0,0); docL->addWidget(docpad, 0, 0, 1, 1); docsPanel->setLayout(docL); //---- Log tab --------------------------------- QWidget *logPanel = new QWidget(this); logPanel->setContentsMargins(0,0,0,0); logPanel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); logPanel->setMaximumSize(9000,9000); logpad = new QTextEdit(this); logpad->setReadOnly(true); logpad->setUndoRedoEnabled(false); logpad->setContextMenuPolicy(Qt::NoContextMenu); logpad->setStyleSheet("p, pre { white-space: 1.2; }"); QGridLayout *logL = new QGridLayout(); logL->setContentsMargins(0,0,0,0); logL->addWidget(logpad, 0, 0, 1, 1); logPanel->setLayout(logL); //---- Combining tabs togeter ------------------ tabs = new QTabWidget(this); tabs->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); tabs->setContentsMargins(0,0,0,0); tabs->setMaximumSize(9000, 9000); tabs->setTabPosition(QTabWidget::South); tabs->setMovable(false); // just to be sure tabs->addTab(editorPanel, QIcon(c_icon_editor), tr("Editor")); tabs->addTab(voicesPanel, QIcon(c_icon_voices), tr("Voices")); tabs->addTab(pluginsPanel, QIcon(c_icon_plugins), tr("Plugins")); tabs->addTab(settingsPanel, QIcon(c_icon_settings), tr("Settings")); tabs->addTab(docsPanel, QIcon(c_icon_doc), tr("Documentation")); tabs->addTab(logPanel, QIcon(c_icon_log), tr("Log")); tabs->widget(0)->setContentsMargins(0,0,0,0); tabs->widget(1)->setContentsMargins(0,0,0,0); tabs->widget(2)->setContentsMargins(0,0,0,0); tabs->widget(3)->setContentsMargins(0,0,0,0); tabs->widget(4)->setContentsMargins(0,0,0,0); tabs->widget(5)->setContentsMargins(0,0,0,0); logTabTextColor = tabs->tabBar()->tabTextColor(5); connect(tabs, SIGNAL(currentChanged(int)), SLOT(onTabSelected(int))); QVBoxLayout *vbl = new QVBoxLayout(); vbl->setContentsMargins(0,0,0,0); vbl->addWidget(tabs); ui->centralWidget->setContentsMargins(0,0,0,0); ui->centralWidget->setLayout(vbl); //---- Toolbars -------------------------------- QToolBar *fileTB = new QToolBar("Fileops", this); QToolBar *playerTB = new QToolBar("Playback", this); QToolBar *toolsTB = new QToolBar("Toolset", this); fileTB ->setFloatable(false); playerTB->setFloatable(false); toolsTB ->setFloatable(false); fileTB->addAction(ui->actionSave); fileTB->addAction(ui->actionSave_audio_as); fileTB->addAction(ui->actionUndo); fileTB->addAction(ui->actionRedo); playerTB->addAction(ui->actionPlay); playerTB->addAction(ui->actionStop); playerTB->addAction(ui->actionBack); playerTB->addAction(ui->actionRepeat); volume = new QSlider(Qt::Horizontal, this); volume->setMaximum(100); volume->setSingleStep(1); volume->setPageStep(1); volume->setValue(settings.value(c_key_sound, 50).toInt()); volume->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); connect(playerTB, SIGNAL(orientationChanged(Qt::Orientation)), volume, SLOT(setOrientation(Qt::Orientation))); muteBtn = new QAction(QIcon(c_icon_sound), "", this); muteBtn->setCheckable(true); connect(muteBtn, SIGNAL(toggled(bool)), SLOT(onMute(bool))); playerTB->addWidget(volume); playerTB->addAction(muteBtn); QComboBox *quantizeCombo = new QComboBox(this); QComboBox *lengthCombo = new QComboBox(this); quantizeCombo->addItems(QStringList() << "Q/4" << "Q/8" << "Q/16" << "Q/32" << "Q/64"); lengthCombo ->addItems(QStringList() << "♪/4" << "♪/8" << "♪/16" << "♪/32" << "♪/64"); quantizeCombo->setCurrentIndex(3); lengthCombo ->setCurrentIndex(3); toolsTB->addAction(ui->actionEdit_Mode); toolsTB->addAction(ui->actionGrid_Snap); toolsTB->addSeparator(); toolsTB->addWidget(quantizeCombo); toolsTB->addWidget(lengthCombo); addToolBar(fileTB); addToolBar(playerTB); addToolBar(toolsTB); toolbars.append(fileTB); toolbars.append(playerTB); toolbars.append(toolsTB); //---------------------------------------------- connect(quantizeCombo, SIGNAL(currentIndexChanged(int)), SLOT(onQuantizeSelected(int))); connect(lengthCombo, SIGNAL(currentIndexChanged(int)), SLOT(onNotelengthSelected(int))); connect(vsLog::instance(), &vsLog::message, this, &MainWindow::onLog); connect(piano, &qtauPiano ::heightChanged, this, &MainWindow::onPianoHeightChanged); connect(noteEditor, &qtauNoteEditor ::widthChanged, this, &MainWindow::onNoteEditorWidthChanged); connect(meter, &qtauMeterBar ::scrolled, this, &MainWindow::notesHScrolled); connect(piano, &qtauPiano ::scrolled, this, &MainWindow::notesVScrolled); connect(drawZone, &qtauDynDrawer ::scrolled, this, &MainWindow::notesHScrolled); connect(noteEditor, &qtauNoteEditor ::vscrolled, this, &MainWindow::notesVScrolled); connect(noteEditor, &qtauNoteEditor ::hscrolled, this, &MainWindow::notesHScrolled); connect(vocalWave, &qtauWaveform ::scrolled, this, &MainWindow::notesHScrolled); connect(musicWave, &qtauWaveform ::scrolled, this, &MainWindow::notesHScrolled); connect(vscr, &QScrollBar ::valueChanged, this, &MainWindow::vertScrolled); connect(hscr, &QScrollBar ::valueChanged, this, &MainWindow::horzScrolled); connect(noteEditor, &qtauNoteEditor ::rmbScrolled, this, &MainWindow::onEditorRMBScrolled); connect(noteEditor, &qtauNoteEditor ::requestsOffset, this, &MainWindow::onEditorRequestOffset); connect(zoom, &QSlider ::valueChanged, this, &MainWindow::onZoomed); connect(meter, &qtauMeterBar ::zoomed, this, &MainWindow::onEditorZoomed); connect(noteEditor, &qtauNoteEditor ::zoomed, this, &MainWindow::onEditorZoomed); connect(drawZone, &qtauDynDrawer ::zoomed, this, &MainWindow::onEditorZoomed); connect(vocalWave, &qtauWaveform ::zoomed, this, &MainWindow::onEditorZoomed); connect(musicWave, &qtauWaveform ::zoomed, this, &MainWindow::onEditorZoomed); connect(ui->actionQuit, &QAction::triggered, [=]() { this->close(); }); connect(ui->actionOpen, &QAction::triggered, this, &MainWindow::onOpenUST); connect(ui->actionSave, &QAction::triggered, this, &MainWindow::onSaveUST); connect(ui->actionSave_as, &QAction::triggered, this, &MainWindow::onSaveUSTAs); connect(ui->actionUndo, &QAction::triggered, this, &MainWindow::onUndo); connect(ui->actionRedo, &QAction::triggered, this, &MainWindow::onRedo); connect(ui->actionDelete, &QAction::triggered, this, &MainWindow::onDelete); connect(ui->actionEdit_Mode, &QAction::triggered, this, &MainWindow::onEditMode); connect(ui->actionGrid_Snap, &QAction::triggered, this, &MainWindow::onGridSnap); connect(ui->actionSave_audio_as, &QAction::triggered, this, &MainWindow::onSaveAudioAs); //---------------------------------------------- lastScoreDir = settings.value(c_key_dir_score, "").toString(); lastAudioDir = settings.value(c_key_dir_audio, "").toString(); audioExt = settings.value(c_key_audio_codec, "").toString(); showNewLogNumber = settings.value(c_key_show_lognum, true).toBool(); if (!settings.value(c_key_dynpanel_on, true).toBool()) { QList<int> panelSizes = editorSplitter->sizes(); panelSizes.last() = 0; editorSplitter->setSizes(panelSizes); } if (settings.value(c_key_win_max, false).toBool()) showMaximized(); else { QRect winGeom = geometry(); QRect setGeom = settings.value(c_key_win_size, QRect(winGeom.topLeft(), minimumSize())).value<QRect>(); if (setGeom.width() >= winGeom.width() && setGeom.height() >= setGeom.height()) setGeometry(setGeom); } //---------------------------------------------- vsLog::instance()->enableHistory(false); onLog(QString("\t%1 %2 @ %3").arg(tr("Launching QTau")).arg(c_qtau_ver).arg(__DATE__), ELog::success); onLog("\t---------------------------------------------", ELog::info); vsLog::r(); // print stored messages from program startup onLog("\t---------------------------------------------", ELog::info); vsLog::n(); }
OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet) : QDialog(parent) , ui(new Ui::OptionsDialog) , model(0) , mapper(0) { ui->setupUi(this); /* Main elements init */ ui->databaseCache->setMinimum(nMinDbCache); ui->databaseCache->setMaximum(nMaxDbCache); ui->threadsScriptVerif->setMinimum(-GetNumCores()); ui->threadsScriptVerif->setMaximum(MAX_SCRIPTCHECK_THREADS); QFrame* horizontalLine = new QFrame(this); horizontalLine->setFrameStyle(QFrame::HLine); horizontalLine->setFixedHeight(1); horizontalLine->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); horizontalLine->setStyleSheet(GULDEN_DIALOG_HLINE_STYLE_NOMARGIN); ui->verticalLayout->insertWidget(2, horizontalLine); setWindowFlags(windowFlags() ^ Qt::WindowContextHelpButtonHint); ui->okButton->setCursor(Qt::PointingHandCursor); ui->cancelButton->setCursor(Qt::PointingHandCursor); ui->resetButton->setCursor(Qt::PointingHandCursor); /* Network elements init */ #ifndef USE_UPNP ui->mapPortUpnp->setEnabled(false); #endif ui->proxyIp->setEnabled(false); ui->proxyPort->setEnabled(false); ui->proxyPort->setValidator(new QIntValidator(1, 65535, this)); ui->proxyIpTor->setEnabled(false); ui->proxyPortTor->setEnabled(false); ui->proxyPortTor->setValidator(new QIntValidator(1, 65535, this)); connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->proxyIp, SLOT(setEnabled(bool))); connect(ui->connectSocks, SIGNAL(toggled(bool)), ui->proxyPort, SLOT(setEnabled(bool))); connect(ui->connectSocks, SIGNAL(toggled(bool)), this, SLOT(updateProxyValidationState())); connect(ui->connectSocksTor, SIGNAL(toggled(bool)), ui->proxyIpTor, SLOT(setEnabled(bool))); connect(ui->connectSocksTor, SIGNAL(toggled(bool)), ui->proxyPortTor, SLOT(setEnabled(bool))); connect(ui->connectSocksTor, SIGNAL(toggled(bool)), this, SLOT(updateProxyValidationState())); /* Window elements init */ #ifdef Q_OS_MAC /* remove Window tab on Mac */ ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabWindow)); #endif /* remove Wallet tab in case of -disablewallet */ if (!enableWallet) { ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabWallet)); } /* Display elements init */ QDir translations(":translations"); ui->bitcoinAtStartup->setToolTip(ui->bitcoinAtStartup->toolTip().arg(tr(PACKAGE_NAME))); ui->bitcoinAtStartup->setText(ui->bitcoinAtStartup->text().arg(tr(PACKAGE_NAME))); ui->lang->setToolTip(ui->lang->toolTip().arg(tr(PACKAGE_NAME))); ui->lang->addItem(QString("(") + tr("default") + QString(")"), QVariant("")); Q_FOREACH (const QString& langStr, translations.entryList()) { QLocale locale(langStr); /** check if the locale name consists of 2 parts (language_country) */ if (langStr.contains("_")) { #if QT_VERSION >= 0x040800 /** display language strings as "native language - native country (locale name)", e.g. "Deutsch - Deutschland (de)" */ ui->lang->addItem(locale.nativeLanguageName() + QString(" - ") + locale.nativeCountryName() + QString(" (") + langStr + QString(")"), QVariant(langStr)); #else /** display language strings as "language - country (locale name)", e.g. "German - Germany (de)" */ ui->lang->addItem(QLocale::languageToString(locale.language()) + QString(" - ") + QLocale::countryToString(locale.country()) + QString(" (") + langStr + QString(")"), QVariant(langStr)); #endif } else { #if QT_VERSION >= 0x040800 /** display language strings as "native language (locale name)", e.g. "Deutsch (de)" */ ui->lang->addItem(locale.nativeLanguageName() + QString(" (") + langStr + QString(")"), QVariant(langStr)); #else /** display language strings as "language (locale name)", e.g. "German (de)" */ ui->lang->addItem(QLocale::languageToString(locale.language()) + QString(" (") + langStr + QString(")"), QVariant(langStr)); #endif } } #if QT_VERSION >= 0x040700 ui->thirdPartyTxUrls->setPlaceholderText("https://example.com/tx/%s"); #endif ui->unit->setModel(new BitcoinUnits(this)); /* Widget-to-option mapper */ mapper = new QDataWidgetMapper(this); mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit); mapper->setOrientation(Qt::Vertical); /* setup/change UI elements when proxy IPs are invalid/valid */ ui->proxyIp->setCheckValidator(new ProxyAddressValidator(parent)); ui->proxyIpTor->setCheckValidator(new ProxyAddressValidator(parent)); connect(ui->proxyIp, SIGNAL(validationDidChange(QValidatedLineEdit*)), this, SLOT(updateProxyValidationState())); connect(ui->proxyIpTor, SIGNAL(validationDidChange(QValidatedLineEdit*)), this, SLOT(updateProxyValidationState())); connect(ui->proxyPort, SIGNAL(textChanged(const QString&)), this, SLOT(updateProxyValidationState())); connect(ui->proxyPortTor, SIGNAL(textChanged(const QString&)), this, SLOT(updateProxyValidationState())); }
BitcoinGUI::BitcoinGUI(QWidget *parent): QMainWindow(parent), clientModel(0), walletModel(0), encryptWalletAction(0), changePassphraseAction(0), unlockWalletAction(0), lockWalletAction(0), aboutQtAction(0), trayIcon(0), notificator(0), rpcConsole(0), nWeight(0) { resize(970, 550); setWindowTitle(tr("Envycoin") + " - " + tr("Wallet")); #ifndef Q_OS_MAC qApp->setWindowIcon(QIcon(":icons/Envycoin")); setWindowIcon(QIcon(":icons/Envycoin")); #else setUnifiedTitleAndToolBarOENVac(true); QApplication::setAttribute(Qt::AA_DontShowIconsIENVenus); #endif // TODO: Theme switching :) QFile f(":qdarkstyle/style.qss"); if (f.exists()) { f.open(QFile::ReadOnly | QFile::Text); QTextStream ts(&f); qApp->setStyleSheet(ts.readAll()); } else QApplication::setStyle(QStyleFactory::create("Fusion")); // Accept D&D of URIs setAcceptDrops(true); // Create actions for the toolbar, menu bar and tray/dock icon createActions(); // Create application menu bar createMenuBar(); // Create the toolbars createToolBars(); // Create the tray icon (or setup the dock icon) createTrayIcon(); // Create tabs overviewPage = new OverviewPage(); statisticsPage = new StatisticsPage(this); blockBrowser = new BlockBrowser(this); transactionsPage = new QWidget(this); QVBoxLayout *vbox = new QVBoxLayout(); transactionView = new TransactionView(this); vbox->addWidget(transactionView); transactionsPage->setLayout(vbox); addressBookPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::SendingTab); receiveCoinsPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::ReceivingTab); sendCoinsPage = new SendCoinsDialog(this); messagePage = new MessagePage(this); signVerifyMessageDialog = new SignVerifyMessageDialog(this); centralWidget = new QStackedWidget(this); centralWidget->addWidget(overviewPage); centralWidget->addWidget(transactionsPage); centralWidget->addWidget(addressBookPage); centralWidget->addWidget(receiveCoinsPage); centralWidget->addWidget(sendCoinsPage); centralWidget->addWidget(messagePage); centralWidget->addWidget(statisticsPage); centralWidget->addWidget(blockBrowser); setCentralWidget(centralWidget); // Create status bar statusBar(); // Status bar notification icons QFrame *frameBlocks = new QFrame(); frameBlocks->setContentsMargins(0,0,0,0); frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks); frameBlocksLayout->setContentsMargins(3,0,3,0); frameBlocksLayout->setSpacing(3); labelEncryptionIcon = new ActiveLabel(); labelStakingIcon = new QLabel(); labelConnectionsIcon = new QLabel(); labelBlocksIcon = new QLabel(); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelEncryptionIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelStakingIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelConnectionsIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelBlocksIcon); frameBlocksLayout->addStretch(); if (GetBoolArg("-staking", true)) { QTimer *timerStakingIcon = new QTimer(labelStakingIcon); connect(timerStakingIcon, SIGNAL(timeout()), this, SLOT(updateStakingIcon())); timerStakingIcon->start(30 * 1000); updateStakingIcon(); } connect(labelEncryptionIcon, SIGNAL(clicked()), unlockWalletAction, SLOT(trigger())); // Progress bar and label for blocks download progressBarLabel = new QLabel(); progressBarLabel->setVisible(false); progressBar = new QProgressBar(); progressBar->setAligENVent(Qt::AlignCenter); progressBar->setVisible(false); // Override style sheet for progress bar for styles that have a segmented progress bar, // as they make the text unreadable (workaround for issue #1071) // See https://qt-project.org/doc/qt-4.8/gallery.html QString curStyle = qApp->style()->metaObject()->className(); if(curStyle == "QWindowsStyle" || curStyle == "QWindowsXPStyle") { progressBar->setStyleSheet("QProgressBar { background-color: #e8e8e8; border: 1px solid grey; border-radius: 7px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #FF8000, stop: 1 orange); border-radius: 7px; margin: 0px; }"); } statusBar()->addWidget(progressBarLabel); statusBar()->addWidget(progressBar); statusBar()->addPermanentWidget(frameBlocks); syncIcoENVovie = new QMovie(":/movies/update_spinner", "mng", this); // Clicking on a transaction on the overview page simply sends you to transaction history page connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), this, SLOT(gotoHistoryPage())); connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), transactionView, SLOT(focusTransaction(QModelIndex))); // Double-clicking on a transaction on the transaction history page shows details connect(transactionView, SIGNAL(doubleClicked(QModelIndex)), transactionView, SLOT(showDetails())); rpcConsole = new RPCConsole(this); connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(show())); // Clicking on "Verify Message" in the address book sends you to the verify message tab connect(addressBookPage, SIGNAL(verifyMessage(QString)), this, SLOT(gotoVerifyMessageTab(QString))); // Clicking on "Sign Message" in the receive coins page sends you to the sign message tab connect(receiveCoinsPage, SIGNAL(sigENVessage(QString)), this, SLOT(gotoSigENVessageTab(QString))); gotoOverviewPage(); }
AMActionRunnerQueueView3::AMActionRunnerQueueView3(AMActionRunner3* actionRunner, QWidget *parent) : QWidget(parent) { actionRunner_ = actionRunner; isCollapsed_ = false; treeView_ = new QTreeView(); treeView_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); treeView_->setModel(actionRunner_->queueModel()); treeView_->setHeaderHidden(true); treeView_->setAttribute(Qt::WA_MacShowFocusRect, false); treeView_->setSelectionBehavior(QAbstractItemView::SelectRows); treeView_->setSelectionMode(QAbstractItemView::ExtendedSelection); treeView_->setAlternatingRowColors(true); treeView_->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); treeView_->setAutoScroll(true); treeView_->setAutoScrollMargin(20); treeView_->setDragEnabled(true); treeView_->viewport()->setAcceptDrops(true); treeView_->setDropIndicatorShown(true); treeView_->setDragDropMode(QTreeView::DragDrop); treeView_->setItemDelegate(new AMActionRunnerQueueItemDelegate3(this)); QFrame* topFrame = new QFrame(); topFrame->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); topFrame->setObjectName("topFrame"); topFrame->setStyleSheet("QFrame#topFrame {\nbackground-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(89, 89, 89, 255), stop:0.494444 rgba(89, 89, 89, 255), stop:0.5 rgba(58, 58, 58, 255), stop:1 rgba(58, 58, 58, 255));\nborder-bottom: 1px solid black;\n}"); QHBoxLayout* hl = new QHBoxLayout(); hl->setSpacing(0); hl->setContentsMargins(6, 2, 12, 1); hideButton_ = new QToolButton(); hideButton_->setStyleSheet("QToolButton {\nborder: none;\nbackground-color: rgba(255, 255, 255, 0);\ncolor: white;\n image: url(:/22x22/arrow-white-down.png)} \nQToolButton::checked {\n image: url(:/22x22/arrow-white-right.png);\n}\n"); hideButton_->setCheckable(true); hideButton_->setChecked(false); hl->addWidget(hideButton_); hl->addSpacing(10); QVBoxLayout* vl2 = new QVBoxLayout(); vl2->setContentsMargins(0,0,0,0); vl2->setSpacing(0); headerTitle_ = new QLabel("Upcoming Actions"); headerTitle_->setStyleSheet("color: white;\nfont: " AM_FONT_XLARGE_ "pt \"Lucida Grande\""); headerSubTitle_ = new QLabel(QString("%1 actions in the workflow queue.").arg(actionRunner_->queuedActionCount())); headerSubTitle_->setStyleSheet("color: rgb(204, 204, 204);\nfont: " AM_FONT_REGULAR_ "pt \"Lucida Grande\""); vl2->addWidget(headerTitle_); vl2->addWidget(headerSubTitle_); hl->addLayout(vl2); hl->addStretch(1); duplicateButton_ = new QPushButton("Duplicate"); duplicateButton_->setDisabled(true); hl->addWidget(duplicateButton_); deleteButton_ = new QPushButton("Delete"); deleteButton_->setDisabled(true); hl->addWidget(deleteButton_); hl->addSpacing(20); pauseButton_ = new QPushButton; QIcon pauseIcon(":/22x22/media-playback-pause.png"); pauseIcon.addPixmap(QPixmap(":/22x22/media-playback-start.png"), QIcon::Normal, QIcon::On); pauseButton_->setIcon(pauseIcon); pauseButton_->setIconSize(QSize(22, 22)); pauseButton_->setCheckable(true); pauseButton_->setChecked(true); pauseButton_->setStyleSheet("QPushButton { border: 2px solid #8f8f91; border-radius: 6px;background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(102,255,102), stop: 1 #dadbde);min-width: 140px; padding: 0px 5px 0 5px;} QPushButton:pressed { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #dadbde, stop: 1 #f6f7fa); } QPushButton:flat { border: none; /* no border for a flat push button */ } QPushButton:checked { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(102,102,255), stop: 1 #f6f7fa); } QPushButton:checked:pressed { background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #dadbde, stop: 1 #f6f7fa); }"); hl->addWidget(pauseButton_); pauseButtonConfiguration(); topFrame->setLayout(hl); QVBoxLayout* vl = new QVBoxLayout(); vl->setContentsMargins(0,0,0,0); vl->setSpacing(0); vl->addWidget(topFrame); vl->addWidget(treeView_); setLayout(vl); connect(hideButton_, SIGNAL(toggled(bool)), this, SLOT(collapse(bool))); connect(pauseButton_, SIGNAL(toggled(bool)), this, SLOT(onPauseButtonClicked(bool))); connect(duplicateButton_, SIGNAL(clicked()), this, SLOT(onDuplicateButtonClicked())); connect(deleteButton_, SIGNAL(clicked()), this, SLOT(onDeleteButtonClicked())); connect(actionRunner_->queueModel(), SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(onQueueActionAddedOrRemoved())); connect(actionRunner_->queueModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(onQueueActionAddedOrRemoved())); connect(treeView_->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(onSelectionChanged())); connect(actionRunner_, SIGNAL(queuePausedChanged(bool)), this, SLOT(onQueuePaused(bool))); }
BitcoinGUI::BitcoinGUI(const NetworkStyle *networkStyle, QWidget *parent) : QMainWindow(parent), clientModel(0), walletFrame(0), unitDisplayControl(0), labelEncryptionIcon(0), labelConnectionsIcon(0), labelBlocksIcon(0), progressBarLabel(0), progressBar(0), progressDialog(0), appMenuBar(0), overviewAction(0), historyAction(0), quitAction(0), sendCoinsAction(0), depositCoinsAction(0), sendCoinsMenuAction(0), usedSendingAddressesAction(0), usedReceivingAddressesAction(0), signMessageAction(0), verifyMessageAction(0), aboutAction(0), receiveCoinsAction(0), receiveCoinsMenuAction(0), optionsAction(0), toggleHideAction(0), encryptWalletAction(0), backupWalletAction(0), changePassphraseAction(0), aboutQtAction(0), openRPCConsoleAction(0), openAction(0), showHelpMessageAction(0), trayIcon(0), trayIconMenu(0), notificator(0), rpcConsole(0), prevBlocks(0), spinnerFrame(0), miningOffAction(0), miningOnAction(0) { setFixedSize(1100, 614); GUIUtil::restoreWindowGeometry("nWindow", QSize(1100, 614), this); qApp->setStyleSheet("QMainWindow { background-image:url(:icons/hg);border:none;font-family:'Open Sans,sans-serif'; }"); QString windowTitle = tr("EuropeCoin Core") + " - "; #ifdef ENABLE_WALLET /* if compiled with wallet support, -disablewallet can still disable the wallet */ enableWallet = !GetBoolArg("-disablewallet", false); #else enableWallet = false; #endif // ENABLE_WALLET if(enableWallet) { windowTitle += tr("Wallet"); } else { windowTitle += tr("Node"); } windowTitle += " " + networkStyle->getTitleAddText(); #ifndef Q_OS_MAC QApplication::setWindowIcon(networkStyle->getTrayAndWindowIcon()); setWindowIcon(networkStyle->getTrayAndWindowIcon()); #else MacDockIconHandler::instance()->setIcon(networkStyle->getAppIcon()); #endif setWindowTitle(windowTitle); #if defined(Q_OS_MAC) && QT_VERSION < 0x050000 // This property is not implemented in Qt 5. Setting it has no effect. // A replacement API (QtMacUnifiedToolBar) is available in QtMacExtras. setUnifiedTitleAndToolBarOnMac(true); #endif rpcConsole = new RPCConsole(0); #ifdef ENABLE_WALLET if(enableWallet) { /** Create wallet frame and make it the central widget */ walletFrame = new WalletFrame(this); setCentralWidget(walletFrame); } else #endif // ENABLE_WALLET { /* When compiled without wallet or -disablewallet is provided, * the central widget is the rpc console. */ setCentralWidget(rpcConsole); } // Accept D&D of URIs setAcceptDrops(true); // Create actions for the toolbar, menu bar and tray/dock icon // Needs walletFrame to be initialized createActions(); // Create application menu bar createMenuBar(); // Create the toolbars createToolBars(); // Create system tray icon and notification createTrayIcon(networkStyle); // Create status bar statusBar(); // Disable size grip because it looks ugly and nobody needs it statusBar()->setSizeGripEnabled(false); // Status bar notification icons QFrame *frameBlocks = new QFrame(); frameBlocks->setContentsMargins(0,0,0,0); frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks); frameBlocksLayout->setContentsMargins(3,0,3,0); frameBlocksLayout->setSpacing(3); unitDisplayControl = new UnitDisplayStatusBarControl(); labelEncryptionIcon = new QLabel(); labelMiningIcon = new QLabel(); labelConnectionsIcon = new QLabel(); labelBlocksIcon = new QLabel(); if(enableWallet) { frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(unitDisplayControl); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelEncryptionIcon); } frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelMiningIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelConnectionsIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelBlocksIcon); frameBlocksLayout->addStretch(); // Set mining pixmap labelMiningIcon->setPixmap(QIcon(":/icons/empty").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); QTimer *timerMiningIcon = new QTimer(labelMiningIcon); timerMiningIcon->start(MODEL_UPDATE_DELAY); connect(timerMiningIcon, SIGNAL(timeout()), this, SLOT(updateMiningIcon())); // Set initial values for mining icon fGenerate = false; dHashesPerSec = 0; // Progress bar and label for blocks download progressBarLabel = new QLabel(); progressBarLabel->setVisible(false); progressBar = new GUIUtil::ProgressBar(); progressBar->setAlignment(Qt::AlignCenter); progressBar->setVisible(false); // Override style sheet for progress bar for styles that have a segmented progress bar, // as they make the text unreadable (workaround for issue #1071) // See https://qt-project.org/doc/qt-4.8/gallery.html QString curStyle = QApplication::style()->metaObject()->className(); if(curStyle == "QWindowsStyle" || curStyle == "QWindowsXPStyle") { progressBar->setStyleSheet("QProgressBar { background-color: #e8e8e8; border: 1px solid grey; border-radius: 7px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #FF8000, stop: 1 orange); border-radius: 7px; margin: 0px; }"); } statusBar()->addWidget(progressBarLabel); statusBar()->addWidget(progressBar); statusBar()->addPermanentWidget(frameBlocks); // Install event filter to be able to catch status tip events (QEvent::StatusTip) this->installEventFilter(this); // Initially wallet actions should be disabled setWalletActionsEnabled(false); // Subscribe to notifications from core subscribeToCoreSignals(); }
BitcoinGUI::BitcoinGUI(QWidget *parent) : QMainWindow(parent), clientModel(0), encryptWalletAction(0), changePassphraseAction(0), unlockWalletAction(0), lockWalletAction(0), aboutQtAction(0), trayIcon(0), notificator(0), rpcConsole(0), prevBlocks(0), nAverageWeight(0), nTotalWeight(0) { restoreWindowGeometry(); setWindowTitle(tr("Reddcoin") + " - " + tr("Wallet")); #ifndef Q_OS_MAC QApplication::setWindowIcon(QIcon(":icons/bitcoin")); setWindowIcon(QIcon(":icons/bitcoin")); #else setUnifiedTitleAndToolBarOnMac(true); QApplication::setAttribute(Qt::AA_DontShowIconsInMenus); #endif // Create wallet frame and make it the central widget walletFrame = new WalletFrame(this); setCentralWidget(walletFrame); // Accept D&D of URIs setAcceptDrops(true); // Create actions for the toolbar, menu bar and tray/dock icon // Needs walletFrame to be initialized createActions(); // Create application menu bar createMenuBar(); // Create the toolbars createToolBars(); // Create system tray icon and notification createTrayIcon(); // Create status bar statusBar(); // Status bar notification icons QFrame *frameBlocks = new QFrame(); frameBlocks->setContentsMargins(0,0,0,0); // frameBlocks->setMinimumWidth(56); // frameBlocks->setMaximumWidth(56); frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks); frameBlocksLayout->setContentsMargins(3,0,3,0); frameBlocksLayout->setSpacing(3); labelEncryptionIcon = new QLabel(); labelStakingIcon = new QLabel(); labelConnectionsIcon = new QLabel(); labelBlocksIcon = new QLabel(); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelEncryptionIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelStakingIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelConnectionsIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelBlocksIcon); frameBlocksLayout->addStretch(); if (GetBoolArg("-staking", true)) { QTimer *timerStakingIcon = new QTimer(labelStakingIcon); connect(timerStakingIcon, SIGNAL(timeout()), this, SLOT(updateStakingIcon())); timerStakingIcon->start(60 * 1000); updateStakingIcon(); } // Progress bar and label for blocks download progressBarLabel = new QLabel(); progressBarLabel->setVisible(false); progressBar = new QProgressBar(); progressBar->setAlignment(Qt::AlignCenter); progressBar->setVisible(false); // Override style sheet for progress bar for styles that have a segmented progress bar, // as they make the text unreadable (workaround for issue #1071) // See https://qt-project.org/doc/qt-4.8/gallery.html QString curStyle = QApplication::style()->metaObject()->className(); if(curStyle == "QWindowsStyle" || curStyle == "QWindowsXPStyle") { progressBar->setStyleSheet("QProgressBar { background-color: #e8e8e8; border: 1px solid grey; border-radius: 7px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #FF8000, stop: 1 orange); border-radius: 7px; margin: 0px; }"); } statusBar()->addWidget(progressBarLabel); statusBar()->addWidget(progressBar); statusBar()->addPermanentWidget(frameBlocks); syncIconMovie = new QMovie(":/movies/update_spinner", "mng", this); rpcConsole = new RPCConsole(this); connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(show())); // prevents an open debug window from becoming stuck/unusable on client shutdown connect(quitAction, SIGNAL(triggered()), rpcConsole, SLOT(hide())); // Install event filter to be able to catch status tip events (QEvent::StatusTip) this->installEventFilter(this); // Initially wallet actions should be disabled setWalletActionsEnabled(false); }
QFrame * ProgramTab::createFooter() { QFrame * footerFrame = new QFrame(); footerFrame->setObjectName("footer"); // Used for styling footerFrame->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed); QLabel * languageLabel = new QLabel(tr("Language:"), this); m_languageComboBox = new QComboBox(); m_languageComboBox->setEditable(false); m_languageComboBox->setEnabled(true); m_languageComboBox->addItems(m_programWindow->getAvailableLanguages()); QSettings settings; QString currentLanguage = settings.value("programwindow/language", "").toString(); if (currentLanguage.isEmpty()) { currentLanguage = m_languageComboBox->currentText(); } setLanguage(currentLanguage, false); QPushButton * addButton = new QPushButton(tr("New")); //addButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(addButton, SIGNAL(clicked()), m_programWindow, SLOT(addTab())); QPushButton * loadButton = new QPushButton(tr("Open...")); //loadButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(loadButton, SIGNAL(clicked()), this, SLOT(loadProgramFile())); m_saveButton = new QPushButton(tr("Save")); //m_saveButton->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed); connect(m_saveButton, SIGNAL(clicked()), this, SLOT(save())); QLabel * portLabel = new QLabel(tr("Port:"), this); m_portComboBox = new SerialPortComboBox(); m_portComboBox->setEditable(false); m_portComboBox->setEnabled(true); QStringList ports = m_programWindow->getSerialPorts(); m_portComboBox->addItems(ports); QString currentPort = settings.value("programwindow/port", "").toString(); if (currentPort.isEmpty()) { currentPort = m_portComboBox->currentText(); } else if (!ports.contains(currentPort)) { currentPort = m_portComboBox->currentText(); } setPort(currentPort); m_programButton = new QPushButton(tr("Program")); m_programButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); connect(m_programButton, SIGNAL(clicked()), this, SLOT(sendProgram())); m_programButton->setEnabled(false); QLabel * programmerLabel = new QLabel(tr("Programmer:"), this); m_programmerComboBox = new QComboBox(); m_programmerComboBox->setEditable(false); m_programmerComboBox->setEnabled(true); updateProgrammers(); QString currentProgrammer = ProgramWindow::LocateName; QString temp = settings.value("programwindow/programmer", "").toString(); if (!temp.isEmpty()) { QFileInfo fileInfo(temp); if (fileInfo.exists()) { currentProgrammer = temp; } } chooseProgrammerAux(currentProgrammer, false); QHBoxLayout *footerLayout = new QHBoxLayout; footerLayout->setMargin(0); footerLayout->setSpacing(5); footerLayout->addWidget(addButton); footerLayout->addWidget(loadButton); footerLayout->addWidget(m_saveButton); footerLayout->addSpacerItem(new QSpacerItem(5,0,QSizePolicy::Expanding,QSizePolicy::Minimum)); footerLayout->addWidget(languageLabel); footerLayout->addWidget(m_languageComboBox); footerLayout->addWidget(portLabel); footerLayout->addWidget(m_portComboBox); footerLayout->addWidget(programmerLabel); footerLayout->addWidget(m_programmerComboBox); footerLayout->addWidget(m_programButton); footerFrame->setLayout(footerLayout); // connect last so these signals aren't triggered during initialization connect(m_languageComboBox, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(setLanguage(const QString &))); connect(m_portComboBox, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(setPort(const QString &))); connect(m_portComboBox, SIGNAL(aboutToShow()), this, SLOT(updateSerialPorts()), Qt::DirectConnection); connect(m_programmerComboBox, SIGNAL(activated(int)), this, SLOT(chooseProgrammerTimed(int))); return footerFrame; }
BitcoinGUI::BitcoinGUI(QWidget *parent): QMainWindow(parent), clientModel(0), walletModel(0), toolbar(0), encryptWalletAction(0), changePassphraseAction(0), unlockWalletAction(0), lockWalletAction(0), aboutQtAction(0), trayIcon(0), notificator(0), rpcConsole(0), prevBlocks(0), nWeight(0) { GUIUtil::restoreWindowGeometry("nWindow", QSize(850, 550), this); setWindowTitle(tr("Sentaro") + " - " + tr("Wallet")); #ifndef Q_OS_MAC qApp->setWindowIcon(QIcon(":icons/sentaro")); setWindowIcon(QIcon(":icons/sentaro")); #else //setUnifiedTitleAndToolBarOnMac(true); QApplication::setAttribute(Qt::AA_DontShowIconsInMenus); #endif setObjectName("sentaro"); setStyleSheet("#sentaro { background-color: qradialgradient(cx: -0.8, cy: 0, fx: -0.8, fy: 0, radius: 1.4, stop: 0 #efefef, stop: 1 #dedede); }"); // Accept D&D of URIs setAcceptDrops(true); // Create actions for the toolbar, menu bar and tray/dock icon createActions(); // Create application menu bar createMenuBar(); // Create the toolbars createToolBars(); // Create the tray icon (or setup the dock icon) createTrayIcon(); // Create status bar statusBar(); // Status bar notification icons QFrame *frameBlocks = new QFrame(); frameBlocks->setContentsMargins(0,0,0,0); frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks); frameBlocksLayout->setContentsMargins(3,0,3,0); frameBlocksLayout->setSpacing(3); labelEncryptionIcon = new QLabel(); labelStakingIcon = new QLabel(); labelConnectionsIcon = new QLabel(); labelBlocksIcon = new QLabel(); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelEncryptionIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelStakingIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelConnectionsIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelBlocksIcon); frameBlocksLayout->addStretch(); // Progress bar and label for blocks download progressBarLabel = new QLabel(); progressBarLabel->setVisible(false); progressBar = new GUIUtil::ProgressBar(); progressBar->setAlignment(Qt::AlignCenter); progressBar->setVisible(false); if (GetBoolArg("-staking", true)) { QTimer *timerStakingIcon = new QTimer(labelStakingIcon); connect(timerStakingIcon, SIGNAL(timeout()), this, SLOT(updateStakingIcon())); timerStakingIcon->start(30 * 1000); updateStakingIcon(); } // Create tabs overviewPage = new OverviewPage(); transactionsPage = new QWidget(this); QVBoxLayout *vbox = new QVBoxLayout(); transactionView = new TransactionView(this); vbox->addWidget(transactionView); transactionsPage->setLayout(vbox); addressBookPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::SendingTab); receiveCoinsPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::ReceivingTab); sendCoinsPage = new SendCoinsDialog(this); signVerifyMessageDialog = new SignVerifyMessageDialog(this); centralWidget = new QStackedWidget(this); centralWidget->addWidget(overviewPage); centralWidget->addWidget(transactionsPage); centralWidget->addWidget(addressBookPage); centralWidget->addWidget(receiveCoinsPage); centralWidget->addWidget(sendCoinsPage); setCentralWidget(centralWidget); // Override style sheet for progress bar for styles that have a segmented progress bar, // as they make the text unreadable (workaround for issue #1071) // See https://qt-project.org/doc/qt-4.8/gallery.html QString curStyle = QApplication::style()->metaObject()->className(); if(curStyle == "QWindowsStyle" || curStyle == "QWindowsXPStyle") { progressBar->setStyleSheet("QProgressBar { background-color: #F8F8F8; border: 1px solid grey; border-radius: 7px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #00CCFF, stop: 1 #33CCFF); border-radius: 7px; margin: 0px; }"); } statusBar()->addWidget(progressBarLabel); statusBar()->addWidget(progressBar); statusBar()->addPermanentWidget(frameBlocks); connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(showConsole())); // prevents an oben debug window from becoming stuck/unusable on client shutdown connect(quitAction, SIGNAL(triggered()), rpcConsole, SLOT(hide())); // Install event filter to be able to catch status tip events (QEvent::StatusTip) this->installEventFilter(this); // Initially wallet actions should be disabled setWalletActionsEnabled(false); // Subscribe to notifications from core subscribeToCoreSignals(); syncIconMovie = new QMovie(":/movies/update_spinner", "mng", this); // Clicking on a transaction on the overview page simply sends you to transaction history page connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), this, SLOT(gotoHistoryPage())); // Double-clicking on a transaction on the transaction history page shows details connect(transactionView, SIGNAL(doubleClicked(QModelIndex)), transactionView, SLOT(showDetails())); // Clicking on "Verify Message" in the address book sends you to the verify message tab connect(addressBookPage, SIGNAL(verifyMessage(QString)), this, SLOT(gotoVerifyMessageTab(QString))); // Clicking on "Sign Message" in the receive coins page sends you to the sign message tab connect(receiveCoinsPage, SIGNAL(signMessage(QString)), this, SLOT(gotoSignMessageTab(QString))); rpcConsole = new RPCConsole(this); connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(show())); // prevents an open debug window from becoming stuck/unusable on client shutdown connect(quitAction, SIGNAL(triggered()), rpcConsole, SLOT(hide())); setWalletActionsEnabled(true); gotoOverviewPage(); }
BitcoinGUI::BitcoinGUI(QWidget *parent): QMainWindow(parent), clientModel(0), walletModel(0), encryptWalletAction(0), changePassphraseAction(0), lockWalletToggleAction(0), aboutQtAction(0), trayIcon(0), notificator(0), rpcConsole(0) { resize(850, 550); setWindowTitle(tr("Bitstar") + " - " + tr("Wallet")); #ifndef Q_OS_MAC qApp->setWindowIcon(QIcon(":icons/bitcoin")); setWindowIcon(QIcon(":icons/bitcoin")); #else setUnifiedTitleAndToolBarOnMac(false); QApplication::setAttribute(Qt::AA_DontShowIconsInMenus); #endif // Load font QFontDatabase::addApplicationFont(":/res/fonts/bebas.ttf"); // Load stylesheet QFile file(":/qss/stylesheet"); file.open( QFile::ReadOnly ); QString styleSheet = QLatin1String( file.readAll() ); qApp->setStyleSheet( styleSheet ); // Accept D&D of URIs setAcceptDrops(true); // Create actions for the toolbar, menu bar and tray/dock icon createActions(); // Create application menu bar createMenuBar(); // Create the toolbars createToolBars(); // Create the tray icon (or setup the dock icon) createTrayIcon(); // Create tabs overviewPage = new OverviewPage(); transactionsPage = new QWidget(this); QVBoxLayout *vbox = new QVBoxLayout(); transactionView = new TransactionView(this); vbox->addWidget(transactionView); transactionsPage->setLayout(vbox); addressBookPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::SendingTab); receiveCoinsPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::ReceivingTab); sendCoinsPage = new SendCoinsDialog(this); signVerifyMessageDialog = new SignVerifyMessageDialog(this); centralWidget = new QStackedWidget(this); centralWidget->addWidget(overviewPage); centralWidget->addWidget(transactionsPage); centralWidget->addWidget(addressBookPage); centralWidget->addWidget(receiveCoinsPage); centralWidget->addWidget(sendCoinsPage); setCentralWidget(centralWidget); // Create status bar statusBar(); // Status bar notification icons QFrame *frameBlocks = new QFrame(); frameBlocks->setContentsMargins(0,0,0,0); frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks); frameBlocksLayout->setContentsMargins(3,0,3,0); frameBlocksLayout->setSpacing(3); labelEncryptionIcon = new QLabel(); labelMintingIcon = new QLabel(); labelConnectionsIcon = new QLabel(); labelBlocksIcon = new QLabel(); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelEncryptionIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelMintingIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelConnectionsIcon); frameBlocksLayout->addStretch(); frameBlocksLayout->addWidget(labelBlocksIcon); frameBlocksLayout->addStretch(); // Set minting pixmap labelMintingIcon->setPixmap(QIcon(":/icons/minting").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); labelMintingIcon->setEnabled(false); // Add timer to update minting info QTimer *timerMintingIcon = new QTimer(labelMintingIcon); timerMintingIcon->start(MODEL_UPDATE_DELAY); connect(timerMintingIcon, SIGNAL(timeout()), this, SLOT(updateMintingIcon())); // Add timer to update minting weights QTimer *timerMintingWeights = new QTimer(labelMintingIcon); timerMintingWeights->start(30 * 1000); connect(timerMintingWeights, SIGNAL(timeout()), this, SLOT(updateMintingWeights())); // Set initial values for user and network weights nWeight, nNetworkWeight = 0; // Progress bar and label for blocks download progressBarLabel = new QLabel(); progressBarLabel->setVisible(false); progressBarLabel->setObjectName("progressBarLabel"); progressBar = new QProgressBar(); progressBar->setAlignment(Qt::AlignCenter); progressBar->setVisible(false); progressBar->setObjectName("progressBar"); // Override style sheet for progress bar for styles that have a segmented progress bar, // as they make the text unreadable (workaround for issue #1071) // See https://qt-project.org/doc/qt-4.8/gallery.html QString curStyle = qApp->style()->metaObject()->className(); if(curStyle == "QWindowsStyle" || curStyle == "QWindowsXPStyle") { progressBar->setStyleSheet("QProgressBar { background-color: #e8e8e8; border: 1px solid grey; border-radius: 7px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #FF8000, stop: 1 orange); border-radius: 7px; margin: 0px; }"); } statusBar()->addWidget(progressBarLabel); statusBar()->addWidget(progressBar); statusBar()->addPermanentWidget(frameBlocks); statusBar()->setObjectName("statusBar"); syncIconMovie = new QMovie(":/movies/update_spinner", "gif", this); // this->setStyleSheet("background-color: #ceffee;"); // Clicking on a transaction on the overview page simply sends you to transaction history page connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), this, SLOT(gotoHistoryPage())); connect(overviewPage, SIGNAL(transactionClicked(QModelIndex)), transactionView, SLOT(focusTransaction(QModelIndex))); // Double-clicking on a transaction on the transaction history page shows details connect(transactionView, SIGNAL(doubleClicked(QModelIndex)), transactionView, SLOT(showDetails())); rpcConsole = new RPCConsole(this); connect(openRPCConsoleAction, SIGNAL(triggered()), rpcConsole, SLOT(show())); // Clicking on "Verify Message" in the address book sends you to the verify message tab connect(addressBookPage, SIGNAL(verifyMessage(QString)), this, SLOT(gotoVerifyMessageTab(QString))); // Clicking on "Sign Message" in the receive coins page sends you to the sign message tab connect(receiveCoinsPage, SIGNAL(signMessage(QString)), this, SLOT(gotoSignMessageTab(QString))); gotoOverviewPage(); }
//creates an address object on the create tab void MultisigDialog::on_addAddressButton_clicked() { //max addresses 15 if(ui->addressList->count() > 14){ ui->addMultisigStatus->setStyleSheet("QLabel { color: red; }"); ui->addMultisigStatus->setText(tr("Maximum possible addresses reached. (16)")); return; } QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); sizePolicy.setHorizontalStretch(0); sizePolicy.setVerticalStretch(0); QFrame* addressFrame = new QFrame(); sizePolicy.setHeightForWidth(addressFrame->sizePolicy().hasHeightForWidth()); addressFrame->setSizePolicy(sizePolicy); addressFrame->setFrameShape(QFrame::StyledPanel); addressFrame->setFrameShadow(QFrame::Raised); addressFrame->setObjectName(QStringLiteral("addressFrame")); QVBoxLayout* frameLayout = new QVBoxLayout(addressFrame); frameLayout->setSpacing(1); frameLayout->setObjectName(QStringLiteral("frameLayout")); frameLayout->setContentsMargins(6, 6, 6, 6); QHBoxLayout* addressLayout = new QHBoxLayout(); addressLayout->setSpacing(0); addressLayout->setObjectName(QStringLiteral("addressLayout")); QLabel* addressLabel = new QLabel(addressFrame); addressLabel->setObjectName(QStringLiteral("addressLabel")); addressLabel->setText(QApplication::translate("MultisigDialog", strprintf("Address / Key %i:", ui->addressList->count()+1).c_str() , 0)); addressLayout->addWidget(addressLabel); QValidatedLineEdit* address = new QValidatedLineEdit(addressFrame); address->setObjectName(QStringLiteral("address")); addressLayout->addWidget(address); QPushButton* addressBookButton = new QPushButton(addressFrame); addressBookButton->setObjectName(QStringLiteral("addressBookButton")); QIcon icon3; icon3.addFile(QStringLiteral(":/icons/address-book"), QSize(), QIcon::Normal, QIcon::Off); addressBookButton->setIcon(icon3); addressBookButton->setAutoDefault(false); connect(addressBookButton, SIGNAL(clicked()), this, SLOT(addressBookButtonReceiving())); addressLayout->addWidget(addressBookButton); QPushButton* addressPasteButton = new QPushButton(addressFrame); addressPasteButton->setObjectName(QStringLiteral("addressPasteButton")); QIcon icon4; icon4.addFile(QStringLiteral(":/icons/editpaste"), QSize(), QIcon::Normal, QIcon::Off); addressPasteButton->setIcon(icon4); addressPasteButton->setAutoDefault(false); connect(addressPasteButton, SIGNAL(clicked()), this, SLOT(pasteText())); addressLayout->addWidget(addressPasteButton); QPushButton* addressDeleteButton = new QPushButton(addressFrame); addressDeleteButton->setObjectName(QStringLiteral("addressDeleteButton")); QIcon icon5; icon5.addFile(QStringLiteral(":/icons/remove"), QSize(), QIcon::Normal, QIcon::Off); addressDeleteButton->setIcon(icon5); addressDeleteButton->setAutoDefault(false); connect(addressDeleteButton, SIGNAL(clicked()), this, SLOT(deleteFrame())); addressLayout->addWidget(addressDeleteButton); frameLayout->addLayout(addressLayout); ui->addressList->addWidget(addressFrame); }