bool ProgramTab::loadProgramFile() { if (isModified() || !m_textEdit->document()->isEmpty()) { m_programWindow->loadProgramFileNew(); return false; } QString fileName = FolderUtils::getOpenFileName( this, tr("Select a program file to load"), FolderUtils::openSaveFolder(), m_highlighter->syntaxer()->extensionString() ); if (fileName.isEmpty()) return false; return loadProgramFile(fileName, "", true); }
void initVis(int screenwidth, int screenheight) { width = screenwidth; height = screenheight; glewInit(); #ifdef VISMU_DEBUG printf("OpenGL version: %s\n", glGetString(GL_VERSION)); printf("GLSL version: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); printf("Vendor: %s\n", glGetString(GL_VENDOR)); printf("Renderer: %s\n", glGetString(GL_RENDERER)); #endif glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, tex); int i; for(i = 0; i < SHADER_AMOUNT; i++){ char fragshadername[64]; snprintf(fragshadername, sizeof(fragshadername), "shaders/frag%d.glsl", i + 1); progs[i].program = loadProgramFile(fragshadername, "shaders/vert.glsl"); progs[i].peak = glGetUniformLocation(progs[i].program, "peak"); progs[i].transition = glGetUniformLocation(progs[i].program, "transition"); progs[i].time = glGetUniformLocation(progs[i].program, "time"); progs[i].texture = glGetUniformLocation(progs[i].program, "tex"); progs[i].size = glGetUniformLocation(progs[i].program, "size"); } loadScreenTriangles(&vao, &vbo); active = SHADER_START - 1; time = TRANSITION_TIME; totaltime = 0; glUseProgram(progs[active].program); }
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; }
void ProgramWindow::setup(const QList<LinkedFile *> & linkedFiles, const QString & alternativePath) { resize(500,700); setAttribute(Qt::WA_DeleteOnClose, true); QFrame * mainFrame = new QFrame(this); QFrame * headerFrame = createHeader(); QFrame * centerFrame = createCenter(); layout()->setMargin(0); layout()->setSpacing(0); QGridLayout *layout = new QGridLayout(mainFrame); layout->setMargin(0); layout->setSpacing(0); layout->addWidget(headerFrame,0,0); layout->addWidget(centerFrame,1,0); setCentralWidget(mainFrame); setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); QSettings settings; if (!settings.value("programwindow/state").isNull()) { restoreState(settings.value("programwindow/state").toByteArray()); } if (!settings.value("programwindow/geometry").isNull()) { restoreGeometry(settings.value("programwindow/geometry").toByteArray()); } installEventFilter(this); // Setup new menu bar for the programming window QMenuBar *menubar = menuBar(); QMenu *currentMenu = menubar->addMenu(tr("&File")); QAction *currentAction = new QAction(tr("New"), this); currentAction->setShortcut(tr("Ctrl+N")); currentAction->setStatusTip(tr("Create a new program")); connect(currentAction, SIGNAL(triggered()), this, SLOT(addTab())); currentMenu->addAction(currentAction); currentAction = new QAction(tr("&Open..."), this); currentAction->setShortcut(tr("Ctrl+O")); currentAction->setStatusTip(tr("Open a program")); connect(currentAction, SIGNAL(triggered()), this, SLOT(loadProgramFile())); currentMenu->addAction(currentAction); currentMenu->addSeparator(); m_saveAction = new QAction(tr("&Save"), this); m_saveAction->setShortcut(tr("Ctrl+S")); m_saveAction->setStatusTip(tr("Save the current program")); connect(m_saveAction, SIGNAL(triggered()), this, SLOT(save())); currentMenu->addAction(m_saveAction); currentAction = new QAction(tr("Rename"), this); currentAction->setStatusTip(tr("Rename the current program")); connect(currentAction, SIGNAL(triggered()), this, SLOT(rename())); currentMenu->addAction(currentAction); currentAction = new QAction(tr("Duplicate tab"), this); currentAction->setStatusTip(tr("Copies the current program into a new tab")); connect(currentAction, SIGNAL(triggered()), this, SLOT(duplicateTab())); currentMenu->addAction(currentAction); currentMenu->addSeparator(); currentAction = new QAction(tr("Remove tab"), this); currentAction->setShortcut(tr("Ctrl+W")); currentAction->setStatusTip(tr("Remove the current program from the sketch")); connect(currentAction, SIGNAL(triggered()), this, SLOT(closeCurrentTab())); currentMenu->addAction(currentAction); currentMenu->addSeparator(); m_printAction = new QAction(tr("&Print..."), this); m_printAction->setShortcut(tr("Ctrl+P")); m_printAction->setStatusTip(tr("Print the current program")); connect(m_printAction, SIGNAL(triggered()), this, SLOT(print())); currentMenu->addAction(m_printAction); currentMenu->addSeparator(); currentAction = new QAction(tr("&Quit"), this); currentAction->setShortcut(tr("Ctrl+Q")); currentAction->setStatusTip(tr("Quit the application")); currentAction->setMenuRole(QAction::QuitRole); connect(currentAction, SIGNAL(triggered()), qApp, SLOT(closeAllWindows2())); currentMenu->addAction(currentAction); currentMenu = menubar->addMenu(tr("&Edit")); m_undoAction = new QAction(tr("Undo"), this); m_undoAction->setShortcuts(QKeySequence::Undo); m_undoAction->setEnabled(false); connect(m_undoAction, SIGNAL(triggered()), this, SLOT(undo())); currentMenu->addAction(m_undoAction); m_redoAction = new QAction(tr("Redo"), this); m_redoAction->setShortcuts(QKeySequence::Redo); m_redoAction->setEnabled(false); connect(m_redoAction, SIGNAL(triggered()), this, SLOT(redo())); currentMenu->addAction(m_redoAction); currentMenu->addSeparator(); m_cutAction = new QAction(tr("&Cut"), this); m_cutAction->setShortcut(tr("Ctrl+X")); m_cutAction->setStatusTip(tr("Cut selection")); m_cutAction->setEnabled(false); connect(m_cutAction, SIGNAL(triggered()), this, SLOT(cut())); currentMenu->addAction(m_cutAction); m_copyAction = new QAction(tr("&Copy"), this); m_copyAction->setShortcut(tr("Ctrl+C")); m_copyAction->setStatusTip(tr("Copy selection")); m_copyAction->setEnabled(false); connect(m_copyAction, SIGNAL(triggered()), this, SLOT(copy())); currentMenu->addAction(m_copyAction); currentAction = new QAction(tr("&Paste"), this); currentAction->setShortcut(tr("Ctrl+V")); currentAction->setStatusTip(tr("Paste clipboard contents")); // TODO: Check clipboard status and disable appropriately here connect(currentAction, SIGNAL(triggered()), this, SLOT(paste())); currentMenu->addAction(currentAction); currentMenu->addSeparator(); currentAction = new QAction(tr("&Select All"), this); currentAction->setShortcut(tr("Ctrl+A")); currentAction->setStatusTip(tr("Select all text")); connect(currentAction, SIGNAL(triggered()), this, SLOT(selectAll())); currentMenu->addAction(currentAction); currentMenu = menuBar()->addMenu(tr("&Program")); QMenu *languageMenu = new QMenu(tr("Select language"), this); currentMenu->addMenu(languageMenu); QString currentLanguage = settings.value("programwindow/language", "").toString(); QStringList languages = getAvailableLanguages(); QActionGroup *languageActionGroup = new QActionGroup(this); foreach (QString language, languages) { currentAction = new QAction(language, this); currentAction->setCheckable(true); m_languageActions.insert(language, currentAction); languageActionGroup->addAction(currentAction); languageMenu->addAction(currentAction); if (!currentLanguage.isEmpty()) { if (language.compare(currentLanguage) == 0) { currentAction->setChecked(true); } } }