⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainwindow.cpp

📁 KeePassX用于保护密码的安全
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			QMessageBox::warning(this,tr("Error"),tr("Could not create key file. The following error occured:\n%1").arg(db->getError()),tr("OK"),"","",0,0);			delete db; db=NULL;			return;		}	}		if(dlg.password!="" && dlg.keyfile=="")		db->CalcMasterKeyByPassword(dlg.password);	if(dlg.password=="" && dlg.keyfile!="")		db->CalcMasterKeyByFile(dlg.keyfile);	if(dlg.password!="" && dlg.keyfile!="")		db->CalcMasterKeyByFileAndPw(dlg.keyfile,dlg.password);	setWindowTitle(tr("KeePassX - %1").arg(tr("[new]")));	GroupView->db=db;	EntryView->db=db;	GroupView->updateItems();	EntryView->updateItems(0);	setStateFileOpen(true);	setStateFileModified(true);	FileOpen=true;	setupDatabaseConnections(db);}}void KeepassMainWindow::OnFileOpen(){QString filename=QFileDialog::getOpenFileName(this,tr("Open Database..."),QDir::homePath(),"*.kdb");if(filename!=QString()){	if(FileOpen) 		if(!closeDatabase())return;	openDatabase(filename);}}void KeepassMainWindow::OnFileClose(){closeDatabase();}void KeepassMainWindow::setStateFileOpen(bool IsOpen){FileOpen=IsOpen;FileSaveAction->setEnabled(IsOpen);FileSaveAsAction->setEnabled(IsOpen);FileCloseAction->setEnabled(IsOpen);FileSettingsAction->setEnabled(IsOpen);FileChangeKeyAction->setEnabled(IsOpen);FileExpPlainTextAction->setEnabled(IsOpen);EditSearchAction->setEnabled(IsOpen);GroupView->setEnabled(IsOpen);EntryView->setEnabled(IsOpen);DetailView->setEnabled(IsOpen);QuickSearchEdit->setEnabled(IsOpen);if(!IsOpen){    EditNewGroupAction->setEnabled(false);    EditEditGroupAction->setEnabled(false);    EditDeleteGroupAction->setEnabled(false);    EditPasswordToClipboardAction->setEnabled(false);    EditUsernameToClipboardAction->setEnabled(false);    EditOpenUrlAction->setEnabled(false);    EditSaveAttachmentAction->setEnabled(false);    EditNewEntryAction->setEnabled(false);    EditEditEntryAction->setEnabled(false);    EditCloneEntryAction->setEnabled(false);    EditDeleteEntryAction->setEnabled(false);    EditGroupSearchAction->setEnabled(false);	EditAutoTypeAction->setEnabled(false);}else{    OnGroupSelectionChanged();    OnEntrySelectionChanged();}}void KeepassMainWindow::editEntry(CEntry* pEntry){CEditEntryDlg dlg(db,pEntry,this,true);switch(dlg.exec()){	case 0: //canceled or no changes			break;	case 1: //modifications but same group			EntryView->refreshItems();			setStateFileModified(true);			break;	case 2: //entry moved to another group			emit entryChanged(); //a direct call of updateItems() would cause a SegFault because of the TreeView base class slots			setStateFileModified(true);			break;}}void KeepassMainWindow::setStateFileModified(bool mod){if(!FileOpen)return;ModFlag=mod;FileSaveAction->setEnabled(mod);}void KeepassMainWindow::setStateGroupSelected(SelectionState s){GroupSelection=s;switch(GroupSelection){ case NONE:    EditNewGroupAction->setEnabled(true);    EditEditGroupAction->setEnabled(false);    EditDeleteGroupAction->setEnabled(false);    EditGroupSearchAction->setEnabled(false);    EditNewEntryAction->setEnabled(false);    break; case SINGLE:    EditNewGroupAction->setEnabled(true);    EditEditGroupAction->setEnabled(true);    EditDeleteGroupAction->setEnabled(true);    EditGroupSearchAction->setEnabled(true);    EditNewEntryAction->setEnabled(true);    break; case SEARCHGROUP:    EditNewGroupAction->setEnabled(false);    EditEditGroupAction->setEnabled(false);    EditDeleteGroupAction->setEnabled(false);    EditGroupSearchAction->setEnabled(false);    EditNewEntryAction->setEnabled(false);    break;   	default: Q_ASSERT(false);}}void KeepassMainWindow::updateDetailView(){if(EntryView->selectedItems().size()!=1){ DetailView->setPlainText(""); return;}CEntry& entry=*((EntryViewItem*)(EntryView->selectedItems()[0]))->pEntry;QString str=tr("<B>Group: </B>%1  <B>Title: </B>%2  <B>Username: </B>%3  <B>URL: </B><a href=%4>%4</a>  <B>Password: </B>%5  <B>Creation: </B>%6  <B>Last Change: </B>%7  <B>LastAccess: </B>%8  <B>Expires: </B>%9");//todo: a "CGroup* PwDatabase::getGroup(CEntry*)" method would be a good ideastr=str.arg(db->group(db->getGroupIndex(entry.GroupID)).Name).arg(entry.Title);if(!config.ListView_HideUsernames)	str=str.arg(entry.UserName);else str=str.arg("****");str=str.arg(entry.URL);entry.Password.unlock();if(!config.ListView_HidePasswords)	str=str.arg(entry.Password.string());else	str=str.arg("****");entry.Password.lock();str=str.arg(entry.Creation.toString(Qt::LocalDate))	  .arg(entry.LastMod.toString(Qt::LocalDate))	  .arg(entry.LastAccess.toString(Qt::LocalDate))	  .arg(entry.Expire.toString(Qt::LocalDate));DetailView->setHtml(str);}void KeepassMainWindow::setStateEntrySelected(SelectionState s){EntrySelection=s;if(GroupSelection == NONE || GroupSelection == SINGLE)switch(EntrySelection){ case NONE:    EditPasswordToClipboardAction->setEnabled(false);    EditUsernameToClipboardAction->setEnabled(false);    EditOpenUrlAction->setEnabled(false);    EditSaveAttachmentAction->setEnabled(false);    EditEditEntryAction->setEnabled(false);    EditCloneEntryAction->setEnabled(false);    EditCloneEntryAction->setText(tr("Clone Entry"));    EditDeleteEntryAction->setEnabled(false);    EditDeleteEntryAction->setText(tr("Delete Entry"));	EditAutoTypeAction->setEnabled(false);    break; case SINGLE:    EditPasswordToClipboardAction->setEnabled(true);    EditUsernameToClipboardAction->setEnabled(true);    EditOpenUrlAction->setEnabled(true);    EditSaveAttachmentAction->setEnabled(true);    EditEditEntryAction->setEnabled(true);    EditCloneEntryAction->setEnabled(true);    EditCloneEntryAction->setText(tr("Clone Entry"));    EditDeleteEntryAction->setEnabled(true);    EditDeleteEntryAction->setText(tr("Delete Entry"));	EditAutoTypeAction->setEnabled(true);    break; case MULTIPLE:    EditPasswordToClipboardAction->setEnabled(false);    EditUsernameToClipboardAction->setEnabled(false);    EditOpenUrlAction->setEnabled(false);    EditSaveAttachmentAction->setEnabled(false);    EditEditEntryAction->setEnabled(false);    EditCloneEntryAction->setEnabled(true);    EditCloneEntryAction->setText(tr("Clone Entries"));    EditDeleteEntryAction->setEnabled(true);    EditDeleteEntryAction->setText(tr("Delete Entries"));	EditAutoTypeAction->setEnabled(false);    break; default: Q_ASSERT(false);}else if(GroupSelection == SEARCHGROUP)switch(EntrySelection){ case NONE:    EditPasswordToClipboardAction->setEnabled(false);    EditUsernameToClipboardAction->setEnabled(false);    EditOpenUrlAction->setEnabled(false);    EditSaveAttachmentAction->setEnabled(false);    EditEditEntryAction->setEnabled(false);    EditCloneEntryAction->setEnabled(false);    EditCloneEntryAction->setText(tr("Clone Entry"));    EditDeleteEntryAction->setEnabled(false);    EditDeleteEntryAction->setText(tr("Delete Entry"));	EditAutoTypeAction->setEnabled(false);    break; case SINGLE:    EditPasswordToClipboardAction->setEnabled(true);    EditUsernameToClipboardAction->setEnabled(true);    EditOpenUrlAction->setEnabled(true);    EditSaveAttachmentAction->setEnabled(true);    EditEditEntryAction->setEnabled(true);    EditCloneEntryAction->setEnabled(false);    EditCloneEntryAction->setText(tr("Clone Entry"));    EditDeleteEntryAction->setEnabled(true);    EditDeleteEntryAction->setText(tr("Delete Entry"));	EditAutoTypeAction->setEnabled(true);    break; case MULTIPLE:    EditPasswordToClipboardAction->setEnabled(false);    EditUsernameToClipboardAction->setEnabled(false);    EditOpenUrlAction->setEnabled(false);    EditSaveAttachmentAction->setEnabled(false);    EditEditEntryAction->setEnabled(false);    EditCloneEntryAction->setEnabled(false);    EditCloneEntryAction->setText(tr("Clone Entries"));    EditDeleteEntryAction->setEnabled(true);    EditDeleteEntryAction->setText(tr("Delete Entries"));	EditAutoTypeAction->setEnabled(false);    break; default: Q_ASSERT(false);}else Q_ASSERT(false);}bool KeepassMainWindow::OnFileSave(){if(db->file->fileName()==QString()) return OnFileSaveAs();config.LastFile=db->file->fileName();if(db->saveDatabase())  setStateFileModified(false);else{  showErrMsg(tr("File could not be saved.\n%1").arg(db->getError()));  return false;  }return true;}bool KeepassMainWindow::OnFileSaveAs(){QString filename=QFileDialog::getSaveFileName(this,tr("Save Database As..."),QDir::homePath(),"*.kdb"); if(filename==QString()) return false;Q_ASSERT(db->file);if(db->file->isOpen()) db->file->close();db->file->setFileName(filename);setWindowTitle(tr("KeePassX - %1").arg(filename));return OnFileSave();}void KeepassMainWindow::OnFileSettings(){CDbSettingsDlg dlg(this,db);if(dlg.exec())setStateFileModified(true);}void KeepassMainWindow::OnFileChangeKey(){CPasswordDialog dlg(this,true,false,true);dlg.setWindowTitle(db->file->fileName());if(dlg.exec()==1){	if(dlg.KeyType==BOTH || dlg.KeyType==KEYFILE){		if(!db->createKeyFile(dlg.keyfile)){			QMessageBox::warning(this,tr("Error"),tr("Could not create key file. The following error occured:\n%1").arg(db->getError()),tr("OK"),"","",0,0);			return;		}	}		if(dlg.password!="" && dlg.keyfile=="")		db->CalcMasterKeyByPassword(dlg.password);	if(dlg.password=="" && dlg.keyfile!="")		db->CalcMasterKeyByFile(dlg.keyfile);	if(dlg.password!="" && dlg.keyfile!="")		db->CalcMasterKeyByFileAndPw(dlg.keyfile,dlg.password);	setStateFileModified(true);}}void KeepassMainWindow::OnFileExit(){close();}void KeepassMainWindow::OnExportToTxt(){QString filename=QFileDialog::getSaveFileName(this,tr("Export To..."),QDir::homePath(),"*.txt");if(filename==QString())return;Export_Txt exp;QString err;exp.exportFile(filename,db,err);}void KeepassMainWindow::OnImportFromPwm(){if(FileOpen) if(!closeDatabase())return;QString filename=QFileDialog::getOpenFileName(this,tr("Open Database..."),QDir::homePath(),"*.pwm");if(filename!=QString::null){	Q_ASSERT(!FileOpen);	db = new PwDatabase();	db->newDatabase();	CSimplePasswordDialog dlg(this,true);	if(!dlg.exec()){		delete db;		db=NULL;		StatusBarGeneral->setText(tr("Ready"));	}	GroupView->db=db;	EntryView->db=db;	QString err;	StatusBarGeneral->setText(tr("Loading Database..."));	Import_PwManager import;	if(import.importFile(filename,dlg.password,db,err)==true){		//SUCCESS		setWindowTitle(tr("KeePassX [new]"));		GroupView->updateItems();		EntryView->updateItems(0);		setStateFileOpen(true);		setStateFileModified(true);	}	else{		//ERROR		delete db;		StatusBarGeneral->setText(tr("Loading Failed"));		if(err=="")err=tr("Unknown error in Import_PwManager::importFile()()");		QMessageBox::critical(this,tr("Error")								,tr("The following error occured while opening the database:\n%1")								.arg(err),tr("OK"));	}	StatusBarGeneral->setText(tr("Ready"));	}}void KeepassMainWindow::OnImportFromKWalletXml(){if(FileOpen) if(!closeDatabase())return;QString filename=QFileDialog::getOpenFileName(this,tr("Open Database..."),QDir::homePath(),"*.pwm");if(filename!=QString::null){	Q_ASSERT(!FileOpen);	db = new PwDatabase();	db->newDatabase();	GroupView->db=db;	EntryView->db=db;	QString err;	StatusBarGeneral->setText(tr("Loading Database..."));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -