📄 mainwindow.cpp
字号:
QStringList C_MainWindow::split(QString &str, char sep, bool is_trim){ QStringList result; size_t separator_pos =0; while(separator_pos < str.length()) { int p = str.find(sep, separator_pos); if (p == -1) p = str.length(); QString elem = str.mid(separator_pos, p-separator_pos); //exctract element if(is_trim) { rtrim(elem); ltrim(elem); } separator_pos = p+1; result.push_back(elem); if (p >= (int)str.length()) break; } return result;}void C_MainWindow::ltrim(QString& str) { size_t len = str.length(); for (size_t i=0; i<len; i++) { if (str[0] == ' ') str.remove(0,1); else break; }}void C_MainWindow::rtrim(QString& str) { int len = static_cast<int>(str.length()); for (int i = len; i>=0; i--) { if (str[(int)str.length()-1] == ' ') str.remove(str.length()-1, 1); else break; }}void C_MainWindow::saveSettings(){ QSettings settings_; settings_.setPath("umputun.com", "esvn", QSettings::User); settings_.beginGroup("/esvn"); settings_.writeEntry("/working_directory", workspace_.FullPath()); QString str; QTextOStream out1(&str); out1 << *spl_dir_list; settings_.writeEntry("/geometry/spl_dir_list", str); QTextOStream out2(&str); out2 << *spl_list_out; settings_.writeEntry("/geometry/spl_list_out", str); settings_.writeEntry("/geometry/fields/1", list_files->columnWidth(0)); settings_.writeEntry("/geometry/fields/2", list_files->columnWidth(1)); settings_.writeEntry("/geometry/fields/3", list_files->columnWidth(2)); settings_.writeEntry("/geometry/fields/4", list_files->columnWidth(3)); settings_.writeEntry("/geometry/fields/5", list_files->columnWidth(4)); settings_.writeEntry("/geometry/fields/6", list_files->columnWidth(5)); settings_.writeEntry("/geometry/fields/7", list_files->columnWidth(6)); QRect sz = QWidget::geometry(); settings_.writeEntry("/geometry/main_height", sz.height()); settings_.writeEntry("/geometry/main_width", sz.width()); settings_.writeEntry("/geometry/main_top", sz.top()); settings_.writeEntry("/geometry/main_left", sz.left()); settings_.writeEntry("/progs/svn", subversion_set_); settings_.writeEntry("/progs/edit", editor_set_); settings_.writeEntry("/progs/diff", diff_set_); settings_.writeEntry("/progs/diff3", dlg_options_->le_diff_3way->text()); settings_.writeEntry("/progs/browser", dlg_options_->le_browser->text()); settings_.writeEntry("/state/ext_diff", dlg_options_->ch_extdiff->isChecked()); settings_.writeEntry("/state/dblclk_cat", dlg_options_->rb_cat->isChecked()); settings_.writeEntry("/state/dblclk_edit", dlg_options_->rb_extedit->isChecked()); settings_.writeEntry("/state/dblclk_open", dlg_options_->rb_open->isChecked()); settings_.writeEntry("/state/hide_unknown", hide_unknown_); settings_.writeEntry("/state/show_ch_paths", dlg_options_->ch_showchp->isChecked()); settings_.writeEntry("/state/show_dir", dlg_options_->ch_showdir->isChecked()); settings_.writeEntry("/state/hide_commit", dlg_options_->ch_hide_commit->isChecked()); settings_.writeEntry("/state/disable_symlinks", dlg_options_->ch_disablesl->isChecked()); settings_.writeEntry("/state/disable_svn_prop", dlg_options_->ch_disable_sprop->isChecked()); settings_.writeEntry("/state/disable_commit_tag", dlg_options_->ch_disable_cotag->isChecked()); settings_.writeEntry("/state/hide_log_filters", dlg_options_->ch_hide_filters->isChecked()); settings_.writeEntry("/auth/user", dlg_options_->le_user->text()); settings_.writeEntry("/auth/passw", dlg_options_->le_passw->text()); settings_.writeEntry("/refresh/online", dlg_options_->rb_online->isChecked()); settings_.writeEntry("/refresh/manual", dlg_options_->rb_manual->isChecked()); settings_.writeEntry("/refresh/interval", dlg_options_->sb_refresh->value() ); settings_.writeEntry("/log/regular", dlg_options_->rb_log_reg->isChecked()); settings_.writeEntry("/log/verbouse", dlg_options_->rb_log_verb->isChecked()); QTextOStream out3(&str); out3 << *(dlg_repos_->spl_dir_list); settings_.writeEntry("/repos_geometry/spl_dir_list", str); settings_.writeEntry("/repos_geometry/fields/1", dlg_repos_->lv_files->columnWidth(0)); settings_.writeEntry("/repos_geometry/fields/2", dlg_repos_->lv_files->columnWidth(1)); settings_.writeEntry("/repos_geometry/fields/3", dlg_repos_->lv_files->columnWidth(2)); settings_.writeEntry("/repos_geometry/fields/4", dlg_repos_->lv_files->columnWidth(3)); settings_.writeEntry("/repos_geometry/fields/5", dlg_repos_->lv_files->columnWidth(4)); QStringList ws_names; map<QString, QStringList>::iterator iter_ws; for (iter_ws = ws_.begin(); iter_ws != ws_.end(); iter_ws++) ws_names.push_back(iter_ws->first); settings_.writeEntry("/workspace/names", ws_names); for (size_t d=0; d<ws_names.size(); d++) if (ws_[ws_names[d]].size()) settings_.writeEntry("/workspace/" + ws_names[d], ws_[ws_names[d]] ); settings_.writeEntry("/openmap/items", open_map_); settings_.writeEntry("/recently/size", int(recent_files_.size())); for (size_t r = 0; r < recent_files_.size(); ++r) { char tmp[128]; sprintf(tmp, "/recently/%d", (int) r); settings_.writeEntry(tmp, recent_files_[r]); } QStringList log_flt_msgs; for (int m=0; m<dlg_log_->cb_msg->count() && m < 32; m++) log_flt_msgs.push_back(dlg_log_->cb_msg->text(m)); settings_.writeEntry("/filters/log/msg", log_flt_msgs); QStringList log_flt_auth; for (int a=0; a<dlg_log_->cb_author->count() && a < 32; a++) log_flt_msgs.push_back(dlg_log_->cb_author->text(a)); settings_.writeEntry("/filters/log/auth", log_flt_msgs); //fonts settings_.writeEntry("/fonts/default", dlg_options_->le_default->text()); settings_.writeEntry("/fonts/view", dlg_options_->le_view->text()); settings_.writeEntry("/fonts/output", dlg_options_->le_output->text()); settings_.writeEntry("/fonts/list", dlg_options_->le_list->text()); settings_.writeEntry("/fonts/diff", dlg_options_->le_diff_font->text()); settings_.writeEntry("/fonts/cmd", dlg_options_->le_cmd->text()); //toolbars settings_.writeEntry("/state/tb_file/show", viewToolbarsFileAction->isOn() ); settings_.writeEntry("/state/tb_view/show", viewToolbarsViewAction->isOn() ); settings_.writeEntry("/state/tb_modify/show", viewToolbarsModifyAction->isOn() ); settings_.writeEntry("/state/tb_query/show", viewToolbarsQueryAction->isOn()) ; settings_.endGroup();}void C_MainWindow::loadSettings(){ QSettings settings_; settings_.setPath("umputun.com", "esvn", QSettings::User); settings_.beginGroup("/esvn"); QRect win_size; win_size.setTop(settings_.readNumEntry("/geometry/main_top", 10)); win_size.setLeft(settings_.readNumEntry("/geometry/main_left", 10)); win_size.setWidth(settings_.readNumEntry("/geometry/main_width", 700)); win_size.setHeight(settings_.readNumEntry("/geometry/main_height", 500)); setGeometry(win_size); QString str1=settings_.readEntry("/geometry/spl_dir_list"); QTextIStream in1(&str1); in1 >> *spl_dir_list; QString str2=settings_.readEntry("/geometry/spl_list_out"); QTextIStream in2(&str2); in2 >> *spl_list_out; //updateGeometry(); list_files->setColumnWidth(0, settings_.readNumEntry("/geometry/fields/1",100)); list_files->setColumnWidth(1, settings_.readNumEntry("/geometry/fields/2",100)); list_files->setColumnWidth(2, settings_.readNumEntry("/geometry/fields/3",100)); list_files->setColumnWidth(3, settings_.readNumEntry("/geometry/fields/4",100)); list_files->setColumnWidth(4, settings_.readNumEntry("/geometry/fields/5",100)); list_files->setColumnWidth(5, settings_.readNumEntry("/geometry/fields/6",100)); list_files->setColumnWidth(6, settings_.readNumEntry("/geometry/fields/7",100)); QString str3=settings_.readEntry("/repos_geometry/spl_dir_list"); QTextIStream in3(&str3); in3 >> *(dlg_repos_->spl_dir_list); //cout << "fff" << settings_.readNumEntry("/repos_geometry/fields/1", 80) << endl; dlg_repos_->lv_files->setColumnWidth(0, settings_.readNumEntry("/repos_geometry/fields/1", 80)); dlg_repos_->lv_files->setColumnWidth(1, settings_.readNumEntry("/repos_geometry/fields/2", 40)); dlg_repos_->lv_files->setColumnWidth(2, settings_.readNumEntry("/repos_geometry/fields/3", 40)); dlg_repos_->lv_files->setColumnWidth(3, settings_.readNumEntry("/repos_geometry/fields/4", 40)); dlg_repos_->lv_files->setColumnWidth(4, settings_.readNumEntry("/repos_geometry/fields/5", 40)); QStringList ws_names = settings_.readListEntry("/workspace/names"); for (size_t d=0; d<ws_names.size(); d++) { QStringList curr_ws = settings_.readListEntry("/workspace/" + ws_names[d]); if (curr_ws.size()) ws_[ws_names[d]] = curr_ws; } QStringList open_map = settings_.readListEntry("/openmap/items"); for (size_t m=0; m<open_map.size(); m++) { QStringList elems = QStringList::split("|", open_map[m]); if (elems.size() < 2) continue; QListViewItem *item = new QListViewItem(dlg_options_->lv_map, 0); item->setText(0, elems[0]); item->setText(1, elems[1]); } getOpenMap(); QStringList log_flt_msgs = settings_.readListEntry("/filters/log/msg"); for (size_t m=0; m<log_flt_msgs.size(); m++) dlg_log_->cb_msg->insertItem(log_flt_msgs[m]); dlg_log_->cb_msg->setCurrentText(""); QStringList log_flt_auth = settings_.readListEntry("/filters/log/auth"); for (size_t a=0; a<log_flt_msgs.size(); a++) dlg_log_->cb_author->insertItem(log_flt_auth[a]); dlg_log_->cb_author->setCurrentText(""); subversion_set_ = settings_.readEntry("/progs/svn", "svn"); svn_commands_->setSvn(subversion_set_); editor_set_ = settings_.readEntry("/progs/edit","kwrite"); diff_set_ = settings_.readEntry("/progs/diff", "kdiff3" ); dlg_options_->le_diff_3way->setText(settings_.readEntry("/progs/diff3", "kdiff3" )); dlg_options_->le_browser->setText(settings_.readEntry("/progs/browser", "mozilla" )); bool is_ext_dif = settings_.readBoolEntry("/state/ext_diff", false); dlg_options_->ch_extdiff->setChecked(is_ext_dif); dlg_diff_setup_->ch_extdiff->setChecked(is_ext_dif); dlg_options_->ch_extdiff->setChecked(settings_.readBoolEntry("/state/ext_diff", false)); dlg_options_->rb_cat->setChecked(settings_.readBoolEntry("/state/dblclk_cat", false)); dlg_options_->rb_extedit->setChecked(settings_.readBoolEntry("/state/dblclk_edit", true)); dlg_options_->rb_open->setChecked(settings_.readBoolEntry("/state/dblclk_open", false)); if (!dlg_options_->rb_cat->isChecked() && !dlg_options_->rb_extedit->isChecked() && !dlg_options_->rb_open->isChecked() ) dlg_options_->rb_extedit->setChecked(true); //compatible with prev version hide_unknown_ = settings_.readBoolEntry("/state/hide_unknown", false); viewHide_unknownAction->setOn(hide_unknown_); //dlg_options_->ch_hide->setChecked(hide_unknown_); dlg_log_->gr_filters->setHidden(settings_.readBoolEntry("/state/hide_log_filters", false)); dlg_log_->useExtDiff(dlg_options_->ch_extdiff->isChecked() ); dlg_options_->le_user->setText(settings_.readEntry("/auth/user", "")); dlg_options_->le_passw->setText(settings_.readEntry("/auth/passw","")); dlg_options_->rb_online->setChecked(settings_.readBoolEntry("/refresh/online", false)); dlg_options_->rb_manual->setChecked(settings_.readBoolEntry("/refresh/manual", true)); dlg_options_->rb_log_reg->setChecked(settings_.readBoolEntry("/log/regular", true)); dlg_options_->rb_log_verb->setChecked(settings_.readBoolEntry("/log/verbouse", false)); dlg_options_->sb_refresh->setValue(settings_.readNumEntry("/refresh/interval", 30)); dlg_options_->le_svn->setText(subversion_set_); dlg_options_->le_editor->setText(editor_set_); dlg_options_->le_diff->setText(diff_set_); dlg_options_->ch_showchp->setChecked(settings_.readBoolEntry("/state/show_ch_paths", false)); dlg_options_->ch_showdir->setChecked(settings_.readBoolEntry("/state/show_dir", false)); dlg_options_->ch_disablesl->setChecked(settings_.readBoolEntry("/state/disable_symlinks", true)); dlg_options_->ch_disable_sprop->setChecked(settings_.readBoolEntry("/state/disable_svn_prop", false)); dlg_options_->ch_disable_cotag->setChecked(settings_.readBoolEntry("/state/disable_commit_tag", false)); dlg_options_->ch_hide_commit->setChecked(settings_.readBoolEntry("/state/hide_commit", false)); int rs_sz = settings_.readNumEntry("/recently/size", 0); for (int r = 0; r < rs_sz; ++r) { char tmp[128]; sprintf(tmp, "/recently/%d", rs_sz-r-1); QString path = settings_.readEntry(tmp, "noname"); recent_files_.remove(path); recent_files_.push_front(path); updateRecentFileItems(); } //fonts dlg_options_->le_default->setText(settings_.readEntry("/fonts/default","")); dlg_options_->le_view->setText(settings_.readEntry("/fonts/view","")); dlg_options_->le_output->setText(settings_.readEntry("/fonts/output","")); dlg_options_->le_list->setText(settings_.readEntry("/fonts/list","")); dlg_options_->le_diff_font->setText(settings_.readEntry("/fonts/diff","")); dlg_options_->le_cmd->setText(settings_.readEntry("/fonts/cmd","")); //toolbars viewToolbarsFileAction->setOn(settings_.readBoolEntry("/state/tb_file/show", false)); viewToolbarsViewAction->setOn(settings_.readBoolEntry("/state/tb_view/show", false)); viewToolbarsModifyAction->setOn(settings_.readBoolEntry("/state/tb_modify/show", false)); viewToolbarsQueryAction->setOn(settings_.readBoolEntry("/state/tb_query/show", false)); showHideToolBars(); //dlg_busy busy(this); //busy.lb_command->setText("Loading workspace " + settings_.readEntry("/working_directory", "")); //busy.show(); QString ws_name = settings_.readEntry("/state/active_workspace", ""); if (ws_name.isEmpty()) { QString working_directory = settings_.readEntry("/working_directory", ""); if (!working_directory.isEmpty()) { C_DirPath wsPath = QDir(working_directory); loadWorkspace(wsPath); } } else { dir_refresh_disable_ = false; loadWS(ws_name); } //busy.hide(); user_ = dlg_options_->le_user->text(); passwd_ = dlg_options_->le_passw->text(); dlg_prop_->setParams(svn_commands_, dlg_options_->ch_disable_sprop->isChecked()); dlg_workspace_->wsData(&ws_); setFonts(); settings_.endGroup();}void C_MainWindow::setFonts() { QFont font; if (dlg_options_->le_default->text() != "") { font.fromString(dlg_options_->le_default->text()); setFont(font); } if (dlg_options_->le_view->text() != "") { font.fromString(dlg_options_->le_view->text()); dlg_view_->tb_view->setFont(font); } if (dlg_options_->le_output->text() != "") { font.fromString(dlg_options_->le_output->text()); textBrowser->setFont(font); } if (dlg_options_->le_list->text() != "") { font.fromString(dlg_options_->le_list->text()); list_files->setFont(font); list_dirs->setFont(font); } if (dlg_options_->le_diff_font->text() != "") { font.fromString(dlg_options_->le_diff_font->text()); dlg_diff_->tx_diff->setFont(font); } if (dlg_options_->le_cmd->text() != "") { font.fromString(dlg_options_->le_cmd->text()); cmd_LineEdit->setFont(font); }}QString C_MainWindow::getUrlOnline(const C_Path& localpath) { QStringList info; PathSelection selection; selection.push_back(localpath); int res = svn_commands_->info(selection, info); QString url = ""; if (res == 0) { //find URL QString for (size_t i=0; i<info.size(); i++) { QString str = info[i]; if (str.find("URL:") == 0 && str.length() > 4 ) { url = str.mid(5, 1024); break; } } } return url;}bool C_MainWindow::fillSvnStatus(C_SvnStatus* res_svn_status){ if (dir_refresh_disable_) { sendToOutput("get status - refresh disabled"); return false; } sendToOutput("get status"); C_SvnCommands svn_command(textBro
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -