void importfromworld(displaymethod * mydisplay, ZZTworld * myworld) { char* filename = filedialog(".", "zzt", "Load World", FTYPE_ALL, mydisplay); ZZTworld* inworld; if (filename == NULL) return; inworld = zztWorldLoad(filename); if (inworld != NULL) { ZZTboard* brd; /* Select a board from the new world */ switchboard(inworld, mydisplay); brd = zztBoardGetCurPtr(inworld); /* Insert after current board and advance */ if (zztWorldInsertBoard(myworld, brd, zztBoardGetCurrent(myworld) + 1, 1)) zztBoardSelect(myworld, zztBoardGetCurrent(myworld) + 1); /* Fix links over the top */ zztBoardValidateLinks(myworld); zztWorldFree(inworld); } free(filename); }
void importfromboard(displaymethod * mydisplay, ZZTworld * myworld) { char* filename = filedialog(".", "brd", "Import ZZT Board", FTYPE_ALL, mydisplay); ZZTboard* brd; if (filename == NULL) return; brd = zztBoardLoad(filename); if (brd == NULL) /* TODO: report the error to the user */ return; /* Insert after current board and advance */ if (zztWorldInsertBoard(myworld, brd, zztBoardGetCurrent(myworld) + 1, 1)) zztBoardSelect(myworld, zztBoardGetCurrent(myworld) + 1); /* Fix links over the top */ zztBoardValidateLinks(myworld); /* Free the free board and filename */ zztBoardFree(brd); free(filename); }
BOOL DecProcess::OpenProcessFile() { if(m_PicFile) { fclose(m_PicFile); m_PicFile = NULL; } CFileDialog filedialog( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "JPG Files (*.jpg)|*.jpg|All Files (*.*)|*.*||"); if(IDOK == filedialog.DoModal()) { m_FilePathName = filedialog.GetPathName(); fopen_s(&m_PicFile,m_FilePathName.GetBuffer(0),"ab+"); if(NULL == m_PicFile) { MessageBox(NULL,"文件打开失败!","错误",MB_OK); } if(GetFileCommentInfo()) { fclose(m_PicFile); return TRUE; } else { fclose(m_PicFile); return FALSE; } } return FALSE; }
void Volume::save_image_to_inr() { QFileDialog filedialog(mw, tr("Export image to Inrimage format")); filedialog.setFileMode(QFileDialog::AnyFile); filedialog.setNameFilter(tr("Inrimage files (*.inr);;" "Compressed Inrimage files (*.inr.gz)")); filedialog.setAcceptMode(QFileDialog::AcceptSave); filedialog.setDefaultSuffix("inr.gz"); if(filedialog.exec()) { const QString filename = filedialog.selectedFiles().front(); std::cerr << "Saving image to file \"" << filename.toLocal8Bit().data() << "\"..."; const int result = ::_writeImage(m_image.image(), filename.toUtf8()); if(result != ImageIO_NO_ERROR) { QMessageBox::warning(mw, mw->windowTitle(), tr("Export to the Inrimage file <tt>%1</tt> failed!").arg(filename)); status_message(tr("Export to the Inrimage file %1 failed!").arg(filename)); std::cerr << " failed!\n"; } else { std::cerr << " done.\n"; status_message(tr("Successfull export to the Inrimage file %1.").arg(filename)); } } }
void Volume::export_off() { QFileDialog filedialog(mw, tr("Export surface to file")); filedialog.setFileMode(QFileDialog::AnyFile); filedialog.setNameFilter(tr("OFF files (*.off);;" "All files (*)")); filedialog.setAcceptMode(QFileDialog::AcceptSave); filedialog.setDefaultSuffix("off"); if(filedialog.exec()) { const QString filename = filedialog.selectedFiles().front(); std::cerr << "Saving to file \"" << filename.toLocal8Bit().data() << "\"..."; std::ofstream out(filename.toUtf8()); CGAL::output_surface_facets_to_off(out, c2t3); if(!out) { QMessageBox::warning(mw, mw->windowTitle(), tr("Export to the OFF file <tt>%1</tt> failed!").arg(filename)); status_message(tr("Export to the OFF file %1 failed!").arg(filename)); std::cerr << " failed!\n"; } else { std::cerr << " done.\n"; status_message(tr("Successfull export to the OFF file %1.").arg(filename)); } } }
/** * @relates texteditor * @brief Load music from a ZZM file. **/ void texteditZZMLoad(texteditor * editor) { char* filename; filename = filedialog(".", "zzm", "Choose ZZT Music (ZZM) File", FTYPE_ALL, editor->d); if (filename != NULL) { stringvector zzmv; zzmv = filetosvector(filename, 80, 80); if (zzmv.first != NULL) { stringvector song; song = zzmpullsong(&zzmv, zzmpicksong(&zzmv, editor->d)); if (song.first != NULL) { /* copy song into editor->text */ editor->text->cur = editor->curline; for (song.cur = song.first; song.cur != NULL; song.cur = song.cur->next) { char * insline = str_duplen("#play ", editor->linewidth); strncat(insline, song.cur->s, editor->linewidth - 6); preinsertstring(editor->text, insline); } deletestringvector(&song); } deletestringvector(&zzmv); } } free(filename); editor->updateflags |= TUD_EDITAREA | TUD_TITLE | TUD_PANEL; }
static void load_movie(HWND hWnd) { char buffer[1024]; memset(buffer,0,1024); if(filedialog(hWnd,0,buffer,"Load Movie...",moviefilter,0) != 0) return; log_printf("WndProc: loading movie '%s'\n",buffer); emu_event(E_LOADMOVIE,buffer); }
static void save_movie(HWND hWnd) { char buffer[1024]; memset(buffer,0,1024); if(filedialog(hWnd,1,buffer,"Save Movie...",moviefilter,0) != 0) return; log_printf("WndProc: saving movie '%s'\n",buffer); emu_event(E_SAVEMOVIE,buffer); }
void csImgGoogle::cs_loadImages() { QStringList fl; QFileDialog filedialog(this); filedialog.setDirectory(getenv("HOME")); QStringList filters; filters << "Image files (*.png *.xpm *.jpg *.tif *.gif)" << "Any files (*)"; filedialog.setNameFilters(filters); filedialog.setAcceptMode ( QFileDialog::AcceptOpen ); filedialog.setFileMode(QFileDialog::ExistingFiles); filedialog.setWindowTitle ( QString("Open Image Files") ); if(filedialog.exec()) { fl = filedialog.selectedFiles(); for (int i = 0; i < fl.size(); ++i) { QPixmap pix(fl.at(i)); //printf("W: %d H: %d File: %s\n",pix.width(),pix.height(),fl.at(i).toStdString().c_str()); if(connected) { char *out; cJSON *json_send; json_send=cJSON_CreateObject(); cJSON_AddStringToObject(json_send,"CMD", "CREATE"); cJSON_AddStringToObject(json_send,"TYPE", "Image"); cJSON_AddNumberToObject(json_send,"OID", -1); cJSON_AddStringToObject(json_send,"URI", fl.at(i).toStdString().c_str()); cJSON_AddNumberToObject(json_send,"WIDTH", pix.width()); cJSON_AddNumberToObject(json_send,"HEIGHT", pix.height()); float pos[2]; pos[0] = 0.0f; pos[1] = 0.0f; cJSON_AddItemToObject(json_send,"POS", cJSON_CreateFloatArray(pos,2)); pos[0] = 1.0f; pos[1] = 1.0f; cJSON_AddItemToObject(json_send,"SCALE", cJSON_CreateFloatArray(pos,2)); out=cJSON_PrintUnformatted(json_send); cJSON_Delete(json_send); pte_Url->setPlainText(QString(out)); sm->sendData((char *)out); free(out); } } } }
static void file_open_patch(HWND hWnd) { char buffer[1024]; static char filter[] = "All Patches (*.ips, *.ups)\0*.ips;*.ups\0" "IPS Patches (*.ips)\0*.ips\0" "UPS Patches (*.ups)\0*.ups\0" "All Files (*.*)\0*.*\0"; memset(buffer,0,1024); if(filedialog(hWnd,0,buffer,"Open Patch...",filter,0) != 0) return; log_printf("WndProc: loading patch '%s'\n",buffer); emu_event(E_LOADPATCH,buffer); }
void ConfigurationListUI::onAddDirectory() { QFileDialog filedialog(this); filedialog.setFileMode(QFileDialog::Directory); filedialog.setOption(QFileDialog::ShowDirsOnly, true); if (filedialog.exec() == QDialog::Rejected) { return; } QStringList fileNames = filedialog.selectedFiles(); int count = m_listModel->rowCount(); m_listModel->insertRow(count); QModelIndex index = m_listModel->index(count); m_listModel->setData(index, QDir::cleanPath(fileNames.at(0))); m_list = m_listModel->stringList(); }
void SettingsDialog::on_recordStorage_activated(int index) { // Set custom filepath for recordings saving if (index == 1) { QFileDialog filedialog(this); filedialog.setFileMode(QFileDialog::Directory); filedialog.setOption(QFileDialog::ShowDirsOnly, true); filedialog.setViewMode(QFileDialog::List); QString dir; if (filedialog.exec()) { dir = filedialog.selectedFiles().first(); settings->setValue("octopus/LocationData", dir); ui->recordStorage->removeItem(ui->recordStorage->count() - 1); ui->recordStorage->addItem(QString("Server, dann holen nach " + dir)); ui->recordStorage->setCurrentIndex(ui->recordStorage->count() - 1); } } }
static void file_open(HWND hWnd) { char buffer[1024]; static char filter[] = "NES ROMs (*.nes, *.unf, *.unif *.fds *.nsf)\0*.nes;*.unf;*.unif;*.fds;*.nsf\0" "iNES ROMs (*.nes)\0*.nes\0" "UNIF ROMs (*.unf, *.unif)\0*.unf;*.unif\0" "FDS Images (*.fds)\0*.fds\0" "NSF Files (*.nsf)\0*.nsf\0" "All Files (*.*)\0*.*\0"; memset(buffer,0,1024); if(filedialog(hWnd,0,buffer,"Open NES ROM...",filter,0) != 0) return; log_printf("WndProc: loading file '%s'\n",buffer); loadrom(buffer); }
void QTERuputer::openFile(void) { pthread_mutex_lock(&eventmutex); event_return_value = 1; QTEFileDialog filedialog(this); if( filedialog.exec() == QDialog::Accepted ) { Log::getInstance()->output(Log::Info, "Load file (%s)\n", filedialog.getSelectFileName()); requestNewLoad( filedialog.getSelectFileName() ); } frame->sync(); pthread_mutex_unlock(&eventmutex); }
// This function writes the gprof output to a file void CBProfilerExecDlg::WriteToFile(wxCommandEvent& /*event*/) { wxFileDialog filedialog(parent, _("Save gprof output to file"), wxEmptyString, wxEmptyString, _T("*.*"), wxFD_SAVE); if (filedialog.ShowModal() == wxID_OK) { wxFFile file(filedialog.GetPath().c_str(), _T("w")); for (size_t n=0; n<gprof_output.GetCount(); ++n) { file.Write(gprof_output[n]); file.Write(_T("\n")); } file.Close(); } }
void formview::on_loadfile() { if(this->archive.get() == NULL) return; COMDLG_FILTERSPEC filetypes = {L"All files", L"*.*"}; CShellFileOpenDialog filedialog( NULL, FOS_FORCEFILESYSTEM | FOS_PATHMUSTEXIST | FOS_FILEMUSTEXIST, NULL, &filetypes, 1); if(filedialog.DoModal(*this) == IDOK) { WTL::CString filepath; filedialog.GetFilePath(filepath); CPath filename(filepath); filename.StripPath(); if(this->archive->add(filepath.operator LPCSTR(), filename.operator LPCSTR())) this->add_item(filename.operator LPCSTR(), this->archive->get_all().back().first.size()); else this->MessageBoxA("Filename already exists or filename is too long", NULL, MB_ICONERROR); } }
ZZTworld * loadworld(displaymethod * mydisplay, ZZTworld * myworld) { char* filename = filedialog(".", "zzt", "Load World", FTYPE_ALL, mydisplay); ZZTworld* newworld; if (filename == NULL) return myworld; newworld = zztWorldLoad(filename); if (newworld != NULL) { char* newpath = (char*) malloc(sizeof(char)*(strlen(filename)+1)); char* newfile = (char*) malloc(sizeof(char)*(strlen(filename)+1)); /* Out with the old and in with the new */ zztWorldFree(myworld); myworld = newworld; /* Change directory */ pathof(newpath, filename, strlen(filename) + 1); chdir(newpath); /* Change filename */ fileof(newfile, filename, strlen(filename) + 1); zztWorldSetFilename(myworld, newfile); /* Select the starting board */ zztBoardSelect(myworld, zztWorldGetStartboard(myworld)); free(newpath); free(newfile); } free(filename); return myworld; }
char *uiOpenFile(uiWindow *parent, char* filter, char* initpath) { return filedialog(windowWindow(parent), GTK_FILE_CHOOSER_ACTION_OPEN, "_Open", filter, initpath); }
char *uiOpenFile(void) { return filedialog(GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_OPEN); }
char *uiSaveFile(void) { return filedialog(GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_SAVE); }
char *uiOpenFile(uiWindow *parent) { return filedialog(windowWindow(parent), GTK_FILE_CHOOSER_ACTION_OPEN, "_Open"); }
int editbox(char *title, stringvector * sv, int editwidth, int flags, displaymethod * d) { int key; /* the key */ int i, j; /* general counters */ int done = 0; /* true when editing/viewing is done */ int updateflags; /* flags to determine what needs update */ stringnode *centerstr; /* str in center of dialog */ stringnode *loopstr; /* node pointer for use in looping */ int selChar = 0; /* vars only relating to editing */ int pos = 0; /* position in sv->cur->s */ char *tmpstr; /* temporary string for pushing */ char strbuf[80] = ""; /* general buffer */ static char savefilename[SAVEFILENAME_LEN] = "temp.zoc"; /* selection variables */ int selectFlag = 0; /* Status of the shift key */ int selPos = -1; /* Position of cursor when selection started; -1 when no selection */ int selLineOffset = 0; /* Offset of line where selection started; positive when below centerstr, negative when above */ /* statics */ static int insertflag = 1; /* nonzero when in insert mode */ static int wrapwidth = 42; /* where to wrap */ /* if there is no string, add one */ if (sv->cur == NULL || sv->first == NULL || sv->last == NULL) pushstring(sv, strcpy((char *) malloc(editwidth + 2), "")); if (sv->cur == NULL) return 0; centerstr = sv->cur; if (editwidth == EDITBOX_NOEDIT) { d->cursorgo(9, 13); /* Look for @title on first line */ if ((flags & EDITBOX_ZOCMODE) && sv->first != NULL && sv->first->s[0] == '@') { /* Display the first line as the title, not in the box itself */ if (sv->first->s[1] != '\x0') title = sv->first->s + 1; /* What's the harm? We're only looking. */ if (centerstr == sv->first) centerstr = centerstr->next; } } /* Check for NULL after advancing past @title, if we did so */ if (centerstr == NULL) return 0; drawscrollbox(d, 0, 0, 1); updateflags = U_ALL; while (!done) { if (editwidth) d->cursorgo(9 + pos, 13); /* If in select mode, center line should be updated no matter what */ if (selPos != -1) updateflags |= U_CENTER; if (updateflags & U_PANEL && editwidth) draweditpanel(insertflag, wrapwidth, flags & EDITBOX_ZOCMODE, d); sv->cur = centerstr; updateditbox(d, sv, updateflags, editwidth, flags, title, selPos == -1); updateflags = U_NONE; /* Draw highlighted text if applicable */ if (selPos != -1) { int startPos = 0, endPos = 0; if (selLineOffset > 0) { startPos = pos; endPos = strlen(centerstr->s); } else if (selLineOffset < 0) { startPos = 0; endPos = pos; } else { if (selPos > pos) { startPos = pos; endPos = selPos; } else { startPos = selPos; endPos = pos; } } for (j = startPos; j < endPos; j++) d->putch(9 + j, 13, centerstr->s[j], ZOC_HIGHLIGHT_COLOUR); if (selLineOffset != 0) { /* Draw meat lines */ if (selLineOffset > 0) { for (i = 1, loopstr = centerstr->next; i < selLineOffset && i < 8 && loopstr != NULL; i++, loopstr = loopstr->next) d->print_discrete(9, 13 + i, ZOC_HIGHLIGHT_COLOUR, loopstr->s); } else { for (i = -1, loopstr = centerstr->prev; i > selLineOffset && i > -8 && loopstr != NULL; i--, loopstr = loopstr->prev) d->print_discrete(9, 13 + i, ZOC_HIGHLIGHT_COLOUR, loopstr->s); } /* Draw farthest line from centerstr */ if (i < 8 && i > -8 && loopstr != NULL) { if (selLineOffset < 0) { startPos = selPos; endPos = strlen(loopstr->s); } else if (selLineOffset > 0) { startPos = 0; endPos = selPos; } for (j = startPos; j < endPos; j++) d->putch_discrete(9 + j, 13 + i, loopstr->s[j], ZOC_HIGHLIGHT_COLOUR); } } /* Update the display */ d->update(3, 4, 51, 19); } /* Get the key */ key = d->getch(); selectFlag = d->shift(); /* If we just started selecting, remember where we started */ if (selectFlag && selPos == -1) selPos = pos; /* Keys which work when editing and browsing */ switch (key) { case DKEY_UP: /* Up Arrow */ if (centerstr->prev != NULL && !(!editwidth && centerstr->prev == sv->first && sv->first->s[0] == '@')) { centerstr = centerstr->prev; if (pos > strlen(centerstr->s)) pos = strlen(centerstr->s); if (selectFlag) selLineOffset++; updateflags = U_EDITAREA; } break; case DKEY_DOWN: /* Down Arrow */ if (centerstr->next != NULL) { centerstr = centerstr->next; if (pos > strlen(centerstr->s)) pos = strlen(centerstr->s); if (selectFlag) selLineOffset--; updateflags = U_EDITAREA; } break; case DKEY_PAGEUP: /* Page Up */ for (i = 0; i < 7 && centerstr->prev != NULL && !(!editwidth && centerstr->prev == sv->first && sv->first->s[0] == '@'); i++) { centerstr = centerstr->prev; if (selectFlag) selLineOffset++; } if (pos > strlen(centerstr->s)) pos = strlen(centerstr->s); updateflags = U_EDITAREA; break; case DKEY_PAGEDOWN: /* Page Down */ for (i = 0; i < 7 && centerstr->next != NULL; i++) { centerstr = centerstr->next; if (selectFlag) selLineOffset--; } if (pos > strlen(centerstr->s)) pos = strlen(centerstr->s); updateflags = U_EDITAREA; break; case DKEY_CTRL_C: case DKEY_CTRL_X: /* Copy to register */ if (selPos != -1) { stringnode *selStart = centerstr, *selEnd = centerstr; int selStartPos, selEndPos; selectionBounds bounds; if (selLineOffset > 0) { /* Other end of selection is below current line, move end down to meet it. */ selStartPos = pos; selEndPos = selPos; for (i = 0; i < selLineOffset; i++) if (selEnd->next != NULL) selEnd = selEnd->next; } else if (selLineOffset < 0) { /* Other end of selection is above current line, move end up to meet it. */ selStartPos = selPos; selEndPos = pos; for (i = 0; i > selLineOffset; i--) if (selStart->prev != NULL) selStart = selStart->prev; } else { /* Selection is only on current line: selStartPos gets the lesser of selPos & pos */ if (selPos > pos) { selStartPos = pos; selEndPos = selPos; } else { selStartPos = selPos; selEndPos = pos; } } bounds.startLine = selStart; bounds.endLine = selEnd; bounds.startPos = selStartPos; bounds.endPos = selEndPos; regyank('\"', bounds); } break; case DKEY_ESC: if (editwidth > EDITBOX_NOEDIT) done = EDITBOX_OK; else done = EDITBOX_CANCEL; break; } /* Keys pertaining to browsing only */ if (editwidth == EDITBOX_NOEDIT) { switch (key) { case DKEY_ENTER: done = EDITBOX_OK; break; } /* If movement is enabled... */ if (flags & EDITBOX_MOVEMENT) { switch (key) { case DKEY_BACKSPACE: done = EDITBOX_BACK; break; case DKEY_RIGHT: done = EDITBOX_FORWARD; break; case DKEY_LEFT: done = EDITBOX_BACKWARD; break; case DKEY_F1: done = EDITBOX_HELP; break; } } } /* Keys pertaining to editing only */ if (editwidth > EDITBOX_NOEDIT) { /* We are edititing! Yea! Fun time! */ switch (key) { case DKEY_NONE: break; /********** Movement ***********/ case DKEY_LEFT: /* Left Arrow */ if (pos > 0) pos--; else { /* Move to end of previous line (or current line) */ if (centerstr->prev != NULL) { centerstr = centerstr->prev; updateflags = U_EDITAREA; } pos = strlen(centerstr->s); if (selectFlag) selLineOffset++; } break; case DKEY_RIGHT: /* Right Arrow */ if (pos < strlen(centerstr->s)) pos++; else { /* Move to begining of next line (or current line) */ if (centerstr->next != NULL) { centerstr = centerstr->next; updateflags = U_EDITAREA; } pos = 0; if (selectFlag) selLineOffset--; } break; case DKEY_HOME: /* Home */ pos = 0; break; case DKEY_END: /* End */ pos = strlen(centerstr->s); break; case DKEY_UP: case DKEY_DOWN: case DKEY_PAGEUP: case DKEY_PAGEDOWN: case DKEY_CTRL_C: /* Avoid inserting these keys */ break; /********** Insert & Delete ***********/ case DKEY_INSERT: /* Insert */ insertflag = !insertflag; updateflags = U_PANEL; break; case DKEY_DELETE: /* Delete */ if (pos < strlen(centerstr->s)) { for (i = pos; i < strlen(centerstr->s); i++) centerstr->s[i] = centerstr->s[i+1]; updateflags = U_CENTER; } else if (strlen(centerstr->s) == 0 && !(sv->first == sv->last)) { /* This string is empty: destroy */ sv->cur = centerstr; deletestring(sv); centerstr = sv->cur; pos = strlen(centerstr->s); updateflags = U_EDITAREA; } else if (centerstr->next != NULL) { if (strlen(centerstr->next->s) == 0) { /* Next string is empty: destroy */ sv->cur = centerstr->next; deletestring(sv); updateflags = U_BOTTOM; } else if (strlen(centerstr->s) + 1 < wrapwidth) { /* merge lines; wordwrap */ i = strlen(centerstr->s); if (centerstr->s[i-1] != ' ' && centerstr->next->s[0] != ' ') { /* add a space at the end */ centerstr->s[i] = ' '; centerstr->s[++i] = 0; } sv->cur = centerstr->next; tmpstr = removestring(sv); sv->cur = centerstr; pos = wordwrap(sv, tmpstr, i, -1, wrapwidth, editwidth); centerstr = sv->cur; free(tmpstr); updateflags = U_CENTER | U_BOTTOM | U_TOP; } } break; /****** ZOC Mode & Wordwrap settings **********/ case DKEY_ALT_Z: /* alt-z - toggle ZOC mode */ flags ^= EDITBOX_ZOCMODE; updateflags = U_PANEL | U_EDITAREA; break; case DKEY_ALT_MINUS: /* alt - */ if (wrapwidth > 10) wrapwidth--; else wrapwidth = editwidth; updateflags = U_PANEL; break; case DKEY_ALT_PLUS: /* alt + */ if (wrapwidth < editwidth) wrapwidth++; else wrapwidth = 10; updateflags = U_PANEL; break; /****** Help dialog ******/ case DKEY_F1: /* F1: help dialog */ /* Look for #command on current line for lookup in help */ i = pos; while (i > 0 && centerstr->s[i] != '#') i--; if (centerstr->s[i] == '#') { /* Copy the command onto tmpstr */ tmpstr = str_dup(centerstr->s + i + 1); for (i = 0; tmpstr[i] != ' ' && tmpstr[i] != '\0'; i++) ; tmpstr[i] = '\0'; if (zztoopFindCommand(tmpstr) == -1) { /* If it's not a valid command, don't bother looking for it */ tmpstr[0] = '\0'; } /* Display the help file with the command as the topic */ helpsectiontopic("langref", tmpstr, d); free(tmpstr); } else { /* Display the oop help file */ helpsectiontopic("langref", NULL, d); } updateflags = U_ALL; break; /********* ZZM Testing ********************/ case DKEY_CTRL_T: case DKEY_ALT_T: sv->cur = centerstr; testMusic(sv, key == DKEY_CTRL_T, editwidth, flags, d); updateflags = U_EDITAREA; break; /********* File access operations *********/ case DKEY_ALT_O: /* alt+o: open file */ case DKEY_ALT_I: /* alt+i: insert file */ { stringvector filetypelist; char* filename = NULL; initstringvector(&filetypelist); pushstring(&filetypelist, "*.zoc"); pushstring(&filetypelist, "*.txt"); pushstring(&filetypelist, "*.hlp"); pushstring(&filetypelist, "*.zzm"); pushstring(&filetypelist, "*.*"); if (editbox("Select A File Type", &filetypelist, 0, 1, d) == 27) { updateflags = U_EDITAREA | U_TITLE; break; } if (filetypelist.cur != NULL) filename = filedialog(".", filetypelist.cur->s + 2, (key == DKEY_ALT_O ? "Open ZZT Object Code (ZOC) File" : "Insert ZZT Object Code (ZOC) File"), FTYPE_ALL, d); if (filename != NULL && strlen(filename) != 0) { stringvector newsvector; newsvector = filetosvector(filename, wrapwidth, editwidth); if (newsvector.first != NULL) { if (key == DKEY_ALT_O) { strcpy(savefilename, filename); /* erase & replace sv */ deletestringvector(sv); *sv = newsvector; centerstr = sv->first; } else { /* insert newsvector before centerstr */ sv->cur = centerstr; if (sv->cur == sv->first) { /* first node */ sv->first = newsvector.first; sv->cur->prev = newsvector.last; newsvector.last->next = sv->cur; centerstr = newsvector.first; } else if (sv->cur->prev != NULL) { /* middle/end node */ newsvector.first->prev = sv->cur->prev; sv->cur->prev->next = newsvector.first; newsvector.last->next = sv->cur; sv->cur->prev = newsvector.last; centerstr = newsvector.first; } else { /* this code should be unreachable */ deletestringvector(&newsvector); } } /* esle alt-i */ } /* fi file selected */ } /* fi not empty */ free(filename); removestringvector(&filetypelist); } /* block */ updateflags = U_EDITAREA | U_TITLE | U_PANEL; break; case DKEY_ALT_S: /* alt-s: save to file */ { char* filename; filename = filenamedialog(savefilename, "", "Save Object Code As", 1, d); if (filename != NULL) { /* Save to the file */ svectortofile(sv, filename); /* Remember the file name */ strncpy(savefilename, filename, SAVEFILENAME_LEN - 1); savefilename[SAVEFILENAME_LEN - 1] = '\x0'; free(filename); } } updateflags = U_EDITAREA | U_PANEL | U_PANEL; break; case DKEY_ALT_M: /* alt-m: load .zzm music */ { char* filename; filename = filedialog(".", "zzm", "Choose ZZT Music (ZZM) File", FTYPE_ALL, d); if (filename != NULL) { stringvector zzmv; zzmv = filetosvector(filename, 80, 80); if (zzmv.first != NULL) { stringvector song; song = zzmpullsong(&zzmv, zzmpicksong(&zzmv, d)); if (song.first != NULL) { /* copy song into sv */ sv->cur = centerstr; for (song.cur = song.first; song.cur != NULL; song.cur = song.cur->next) { tmpstr = (char*) malloc(editwidth + 2); if (flags & EDITBOX_ZOCMODE) { strcpy(tmpstr, "#play "); strncat(tmpstr, song.cur->s, editwidth - 6); } else { strncpy(tmpstr, song.cur->s, editwidth); } preinsertstring(sv, tmpstr); } deletestringvector(&song); } deletestringvector(&zzmv); } } free(filename); } updateflags = U_EDITAREA | U_TITLE | U_PANEL; break; case DKEY_CTRL_R: /* ctrl-r: rip music */ { /* This is mostly worthless just now */ stringvector ripped; sv->cur = centerstr; ripped = zzmripsong(sv, 4); scrolldialog("Ripped Music", &ripped, d); deletestringvector(&ripped); updateflags = U_ALL; } break; /******** Cut operation *********/ case DKEY_CTRL_DELETE: /* ctrl-delete: clear selected text */ case DKEY_CTRL_X: /* ctrl-x: cut selected text */ sv->cur = centerstr; /* Destroy the meat of the selection */ if (selPos != -1) { int selStartPos, selEndPos, offset = selLineOffset; if (offset < 0) { /* Other end is above centerstr */ offset = -offset; selStartPos = selPos; selEndPos = pos; /* Move back to top of selection */ for (i = 0; i < offset; i++) { if (sv->cur->prev != NULL) sv->cur = sv->cur->prev; } /* Change centerstr to reflect the top of the selection */ centerstr = sv->cur; } else { selStartPos = pos; selEndPos = selPos; } if (offset == 0) { /* Only one line to work with */ int deltaPos; /* Reverse selStartPos and selEndPos if start is bigger */ if (selStartPos > selEndPos) { int swapPos = selStartPos; selStartPos = selEndPos; selEndPos = swapPos; } /* Remove everything between selStartPos and selEndPos */ deltaPos = selEndPos - selStartPos; for (i = selEndPos; i < strlen(centerstr->s); i++) { centerstr->s[i - deltaPos] = centerstr->s[i]; } centerstr->s[i - deltaPos] = '\0'; /* Move the cursor to the starting position of the cut */ pos = selStartPos; } else { /* Multiple lines were involved */ /* Remove lines following the first line of the block */ sv->cur = centerstr->next; for (i = 0; i + 1 < offset; i++) { deletestring(sv); } /* Remove the string at the end of the cut */ sv->cur = centerstr->next; tmpstr = removestring(sv); /* Remove first selEndPos chars from end string */ for (i = 0; i < (strlen(tmpstr) - selEndPos); i++) tmpstr[i] = tmpstr[i+selEndPos]; tmpstr[i] = 0; /* Truncate the string at the start of the cut */ sv->cur = centerstr; sv->cur->s[selStartPos] = '\0'; /* Wordwrap the end string onto this one */ /* The -1 tells wordwrap to track the cursor position at * the beginning of tmpstr. Negative tracking values should * be used only by wordwrap for internal purposes, but * necessity warrents in this case. vv */ pos = wordwrap(sv, tmpstr, selStartPos, -1, wrapwidth, editwidth); centerstr = sv->cur; /* Follow cursor */ /* tmpstr is our responsability */ free(tmpstr); } updateflags = U_EDITAREA; } break; case DKEY_CTRL_V: /* ctrl-v: paste register */ sv->cur = centerstr; pos = regput('\"', sv, pos, wrapwidth, editwidth); centerstr = sv->cur; updateflags = U_EDITAREA; break; case DKEY_TAB: /* Tab */ /* determine tab amount */ j = 4 - (pos % 4); if (strlen(centerstr->s) + j < (wrapwidth?wrapwidth:editwidth)) { /* insert if there is room */ for (i = strlen(centerstr->s) + j; i > pos; i--) centerstr->s[i] = centerstr->s[i-j]; for (i = 0; i < j; i++) centerstr->s[pos++] = ' '; updateflags = U_CENTER; } else { /* no room; wordwrap */ for (i = 0; i < j; i++) strbuf[i] = ' '; strbuf[i] = 0; sv->cur = centerstr; pos = wordwrap(sv, strbuf, pos, pos, wrapwidth, editwidth); centerstr = sv->cur; updateflags = U_EDITAREA; } break; case DKEY_ENTER: /* Enter */ tmpstr = (char*) malloc(editwidth + 2); for (i = pos, j = 0; i < strlen(centerstr->s); i++, j++) tmpstr[j] = centerstr->s[i]; centerstr->s[pos] = 0; tmpstr[j] = 0; sv->cur = centerstr; insertstring(sv, tmpstr); centerstr = centerstr->next; pos = 0; updateflags = U_EDITAREA; break; case DKEY_BACKSPACE: /* Backspace */ if (pos > 0) { for (i = pos - 1; i < strlen(centerstr->s); i++) centerstr->s[i] = centerstr->s[i+1]; pos--; updateflags = U_CENTER; } else if (centerstr->prev != NULL) { if (strlen(centerstr->s) == 0) { /* remove current line & move up & to eol */ sv->cur = centerstr; centerstr = centerstr->prev; pos = strlen(centerstr->s); deletestring(sv); updateflags = U_TOP | U_CENTER; } else if (strlen(centerstr->prev->s) == 0) { /* remove previous line */ sv->cur = centerstr->prev; deletestring(sv); /* update center too, in case @ line has moved to top now */ updateflags = U_TOP | U_CENTER; } else if (strlen(centerstr->prev->s) + 1 < wrapwidth) { /* merge lines; wordwrap */ i = strlen(centerstr->prev->s); if (centerstr->prev->s[i-1] != ' ' && centerstr->s[0] != ' ') { /* add a space at the end */ centerstr->prev->s[i] = ' '; centerstr->prev->s[i + 1] = 0; } sv->cur = centerstr->prev; tmpstr = removestring(sv); sv->cur = centerstr; pos = wordwrap(sv, tmpstr, 0, 0, wrapwidth, editwidth); centerstr = sv->cur; free(tmpstr); updateflags = U_EDITAREA; } } break; case DKEY_CTRL_Y: /* ctrl-y: delete line */ pos = 0; sv->cur = centerstr; if (centerstr->next != NULL) { centerstr = centerstr->next; deletestring(sv); updateflags = U_CENTER | U_BOTTOM; } else if (centerstr->prev != NULL) { centerstr = centerstr->prev; deletestring(sv); updateflags = U_TOP | U_CENTER; } else { centerstr->s[0] = 0; updateflags = U_CENTER; } break; case DKEY_ESC: /* escape when done */ done = EDITBOX_OK; break; case DKEY_CTRL_A: /* ctrl-a: insert ascii char/decimal-value */ strcpy(strbuf, centerstr->s); updateflags = U_EDITAREA; if (str_equ(strbuf, "#char", STREQU_UNCASE | STREQU_RFRONT)) { /* append dec value for ascii char */ sscanf(strbuf + 5, "%d", &selChar); key = charselect(d, selChar); if (key == -1) break; selChar = key; centerstr->s[5] = ' '; centerstr->s[6] = 0; /* change c to a string */ sprintf(strbuf, "%d", selChar); strcat(centerstr->s, strbuf); pos = strlen(centerstr->s); updateflags = U_EDITAREA; break; } else { /* ctrl-a: insert ascii char */ key = charselect(d, selChar); if (key == -1) break; else selChar = key; } /* no break; we just changed the key & want to insert it */ default: key = key & 0xFF; /* Clear all but the first 8 bits */ /* Normal/weird char for insert/replace */ if (insertflag) { /* insert */ if (strlen(centerstr->s) < (wrapwidth?wrapwidth:editwidth)) { /* insert if there is room */ for (i = strlen(centerstr->s) + 1; i > pos; i--) centerstr->s[i] = centerstr->s[i-1]; centerstr->s[pos++] = key; updateflags |= U_CENTER; } else if (wrapwidth) { /* no room; wordwrap */ strbuf[0] = key; strbuf[1] = 0; sv->cur = centerstr; pos = wordwrap(sv, strbuf, pos, pos, wrapwidth, editwidth); centerstr = sv->cur; updateflags = U_EDITAREA; } } else { /* easy replace */ if (centerstr->s[pos] == 0) { if (strlen(centerstr->s) < (wrapwidth?wrapwidth:editwidth)) { centerstr->s[pos+1] = 0; centerstr->s[pos++] = key; updateflags |= U_CENTER; } else if (wrapwidth) { /* no room; wordwrap */ strbuf[0] = key; strbuf[1] = 0; sv->cur = centerstr; pos = wordwrap(sv, strbuf, pos, pos, wrapwidth, editwidth); centerstr = sv->cur; updateflags = U_EDITAREA; } } else { centerstr->s[pos++] = key; updateflags |= U_CENTER; } } /* esle replace */ break; } } /* esle in editmode */ /* if the shift key is not still held down and we are selecting, * then stop select mode */ /* also stop if true ASCII key was pressed and selection is active */ if ((!selectFlag && selPos != -1) || (key < 0x7F && selPos != -1)) { selPos = -1; selLineOffset = 0; updateflags |= U_EDITAREA; } } /* elihw */ sv->cur = centerstr; return done; }
/** * @relates texteditor * @brief Open a file for editting. * * @param insertflag Insert file at cursor when true; otherwise overwrite all * existing text. **/ void texteditFileOpen(texteditor * editor, int insertflag) { stringvector filetypelist; char* filename = NULL; initstringvector(&filetypelist); pushstring(&filetypelist, "*.zoc"); pushstring(&filetypelist, "*.txt"); pushstring(&filetypelist, "*.hlp"); pushstring(&filetypelist, "*.zzm"); pushstring(&filetypelist, "*.*"); if (editbox("Select A File Type", &filetypelist, 0, 1, editor->d) == 27) { editor->updateflags |= TUD_EDITAREA | TUD_TITLE; return; } if (filetypelist.cur != NULL) filename = filedialog(".", filetypelist.cur->s + 2, (!insertflag ? "Open ZZT Object Code (ZOC) File" : "Insert ZZT Object Code (ZOC) File"), FTYPE_ALL, editor->d); if (filename != NULL && strlen(filename) != 0) { stringvector filetext; filetext = filetosvector(filename, editor->wrapwidth, editor->linewidth); if (filetext.first != NULL) { /* TODO: remember the filename for future reference */ if (!insertflag) { /* erase & replace editor->text */ deletestringvector(editor->text); *editor->text = filetext; editor->curline = editor->text->first; editor->pos = 0; } else { /* insert filetext before editor->curline */ editor->text->cur = editor->curline; /* TODO: this code should be in an svector function */ if (editor->text->cur == editor->text->first) { /* first node */ editor->text->first = filetext.first; editor->text->cur->prev = filetext.last; filetext.last->next = editor->text->cur; editor->curline = filetext.first; } else if (editor->text->cur->prev != NULL) { /* middle/end node */ filetext.first->prev = editor->text->cur->prev; editor->text->cur->prev->next = filetext.first; filetext.last->next = editor->text->cur; editor->text->cur->prev = filetext.last; editor->curline = filetext.first; } else { /* this code should be unreachable */ deletestringvector(&filetext); } } /* esle */ } /* fi file selected */ } /* fi not empty */ free(filename); removestringvector(&filetypelist); editor->updateflags |= TUD_EDITAREA | TUD_TITLE | TUD_PANEL; }
char *uiSaveFile(uiWindow *parent) { return filedialog(windowWindow(parent), GTK_FILE_CHOOSER_ACTION_SAVE, "_Save"); }
bool ConfParams() { param_entry_s *pFirstParam = NULL; std::vector<char *> ParamItems; for (std::list<command_entry_s *>::iterator p=InstallInfo.command_entries.begin();p!=InstallInfo.command_entries.end(); p++) { for (std::map<std::string, param_entry_s *>::iterator p2=(*p)->parameter_entries.begin(); p2!=(*p)->parameter_entries.end();p2++) { if (!pFirstParam) pFirstParam = p2->second; ParamItems.push_back(MakeCString(p2->first)); } } if (!pFirstParam) return true; // No command entries...no need for this screen char *title = CreateText("<C></B/29>%s<!29!B>", GetTranslation("Configure parameters")); char *buttons[3] = { GetTranslation("Edit parameter"), GetTranslation("Continue"), GetTranslation("Cancel") }; ButtonBar.Clear(); ButtonBar.AddButton("TAB", "Next button"); ButtonBar.AddButton("ENTER", "Activate button"); ButtonBar.AddButton("Arrows", "Navigate menu"); ButtonBar.AddButton("A", "About"); ButtonBar.AddButton("ESC", "Exit program"); ButtonBar.Draw(); CCDKButtonBox ButtonBox(CDKScreen, CENTER, GetDefaultHeight()-1, 1, GetDefaultWidth(), 0, 1, 3, buttons, 3); ButtonBox.SetBgColor(5); CCDKScroll ScrollList(CDKScreen, getbegx(ButtonBox.GetBBox()->win), 2, getbegy(ButtonBox.GetBBox()->win)-1, GetDefaultWidth()/2, RIGHT, title, &ParamItems[0], ParamItems.size()); ScrollList.SetBgColor(5); ScrollList.Bind('a', ShowAboutK); const int defh = 3; CCDKSWindow DescWindow(CDKScreen, (getbegx(ScrollList.GetScroll()->win) + getmaxx(ScrollList.GetScroll()->win))-1, 2, getmaxy(ScrollList.GetScroll()->win)-defh-1, (GetDefaultWidth()/2)+1, CreateText("<C></B/29>%s<!29!B>", GetTranslation("Description")), 30); DescWindow.SetBgColor(5); DescWindow.AddText(GetTranslation(pFirstParam->description)); CCDKSWindow DefWindow(CDKScreen, (getbegx(ScrollList.GetScroll()->win) + getmaxx(ScrollList.GetScroll()->win))-1, getmaxy(DescWindow.GetSWin()->win), defh, (GetDefaultWidth()/2)+1, NULL, 4); DefWindow.SetBgColor(5); const char *str = pFirstParam->defaultval.c_str(); if (pFirstParam->param_type == PTYPE_BOOL) { if (!strcmp(str, "true")) str = GetTranslation("Enabled"); else str = GetTranslation("Disabled"); } DefWindow.AddText(CreateText("</B/29>%s:<!29!B> %s", GetTranslation("Default"), str), false); DefWindow.AddText(CreateText("</B/29>%s:<!29!B> %s", GetTranslation("Current"), str), false); setCDKScrollLLChar(ScrollList.GetScroll(), ACS_LTEE); setCDKScrollLRChar(ScrollList.GetScroll(), ACS_BTEE); setCDKScrollURChar(ScrollList.GetScroll(), ACS_TTEE); setCDKSwindowULChar(DescWindow.GetSWin(), ACS_TTEE); setCDKSwindowLLChar(DescWindow.GetSWin(), ACS_LTEE); setCDKSwindowLRChar(DescWindow.GetSWin(), ACS_RTEE); setCDKSwindowURChar(DefWindow.GetSWin(), ACS_RTEE); setCDKSwindowLRChar(DefWindow.GetSWin(), ACS_RTEE); setCDKButtonboxULChar(ButtonBox.GetBBox(), ACS_LTEE); setCDKButtonboxURChar(ButtonBox.GetBBox(), ACS_RTEE); ButtonBox.Draw(); DescWindow.Draw(); DefWindow.Draw(); void *Data[4] = { &DescWindow, &DefWindow, &ScrollList, &ParamItems }; setCDKScrollPreProcess(ScrollList.GetScroll(), ScrollParamMenuK, &Data); ScrollList.Bind(KEY_TAB, SwitchButtonK, ButtonBox.GetBBox()); bool success = false; while(1) { int selection = ScrollList.Activate(); if (ScrollList.ExitType() == vNORMAL) { if (ButtonBox.GetCurrent() == 1) { success = true; break; } else if (ButtonBox.GetCurrent() == 2) { success = false; break; } param_entry_s *pParam = GetParamByName(ParamItems[selection]); if (pParam->param_type == PTYPE_DIR) { CFileDialog filedialog(GetFirstValidDir(pParam->value), CreateText("<C>%s", GetTranslation("Select a directory")), true, false); if (filedialog.Activate()) pParam->value = filedialog.Result(); filedialog.Destroy(); refreshCDKScreen(CDKScreen); } else if (pParam->param_type == PTYPE_STRING) { CCDKEntry entry(CDKScreen, CENTER, CENTER, GetTranslation("Please enter new value"), "", 40, 0, 256); entry.SetBgColor(26); entry.SetValue(pParam->value); const char *newval = entry.Activate(); if ((entry.ExitType() == vNORMAL) && newval) pParam->value = newval; // Restore screen entry.Destroy(); refreshCDKScreen(CDKScreen); } else { std::vector<char *> chitems; int cur = 0; if (pParam->param_type == PTYPE_BOOL) { chitems.push_back(GetTranslation("Disable")); chitems.push_back(GetTranslation("Enable")); cur = (pParam->value == "true") ? 1 : 0; } else { int i = 0; for (std::list<std::string>::iterator it=pParam->options.begin(); it!=pParam->options.end();it++, i++) { chitems.push_back(GetTranslation(MakeCString(*it))); if (*it == pParam->value) cur = i; } } CCDKScroll chScrollList(CDKScreen, CENTER, CENTER, 6, 30, RIGHT, GetTranslation("Please choose new value"), &chitems[0], chitems.size()); chScrollList.SetBgColor(26); chScrollList.SetCurrent(cur); int chsel = chScrollList.Activate(); if (chScrollList.ExitType() == vNORMAL) { if (pParam->param_type == PTYPE_BOOL) { if (!strcmp(chitems[chsel], GetTranslation("Enable"))) pParam->value = "true"; else pParam->value = "false"; } else pParam->value = chitems[chsel]; } chScrollList.Destroy(); refreshCDKScreen(CDKScreen); } DefWindow.Clear(); DefWindow.AddText(CreateText("</B/29>%s:<!29!B> %s", GetTranslation("Default"), GetParamDefault(pParam)), false); DefWindow.AddText(CreateText("</B/29>%s:<!29!B> %s", GetTranslation("Current"), GetParamValue(pParam)), false); } else { success = false; break; } } return success; }
char *uiSaveFile(uiWindow *parent, char* filter, char* initpath) { return filedialog(windowWindow(parent), GTK_FILE_CHOOSER_ACTION_SAVE, "_Save", filter, initpath); }