LogDialog::LogDialog(KConfig& cfg, QWidget *parent, const char *name) : KDialogBase(parent, name, false, QString::null, Ok | Apply | Close | Help | User1 | User2 | User3, Close, true, KGuiItem(i18n("&Annotate")), KGuiItem(i18n("&Diff"), "vcs_diff"), KGuiItem(i18n("&Find..."), "find")) , cvsService(0) , partConfig(cfg) { QSplitter *splitter = new QSplitter(Qt::Vertical, this); setMainWidget(splitter); tree = new LogTreeView(this); connect( tree, SIGNAL(revisionClicked(QString,bool)), this, SLOT(revisionSelected(QString,bool)) ); QWidget* listWidget = new QWidget(this); QVBoxLayout* listLayout = new QVBoxLayout(listWidget); QHBoxLayout* searchLayout = new QHBoxLayout(listLayout); searchLayout->setMargin(KDialog::spacingHint()); searchLayout->setSpacing(KDialog::spacingHint()); list = new LogListView(partConfig, listWidget); listLayout->addWidget(list, 1); KListViewSearchLine* searchLine = new KListViewSearchLine(listWidget, list); QLabel* searchLabel = new QLabel(searchLine, i18n("S&earch:"), listWidget); searchLayout->addWidget(searchLabel); searchLayout->addWidget(searchLine, 1); connect( list, SIGNAL(revisionClicked(QString,bool)), this, SLOT(revisionSelected(QString,bool)) ); plain = new LogPlainView(this); connect( plain, SIGNAL(revisionClicked(QString,bool)), this, SLOT(revisionSelected(QString,bool)) ); tabWidget = new QTabWidget(splitter); tabWidget->addTab(tree, i18n("&Tree")); tabWidget->addTab(listWidget, i18n("&List")); tabWidget->addTab(plain, i18n("CVS &Output")); connect(tabWidget, SIGNAL(currentChanged(QWidget*)), this, SLOT(tabChanged(QWidget*))); QWhatsThis::add(tree, i18n("Choose revision A by clicking with the left " "mouse button,\nrevision B by clicking with " "the middle mouse button.")); items.setAutoDelete(true); tags.setAutoDelete(true); QWidget *mainWidget = new QWidget(splitter); QBoxLayout *layout = new QVBoxLayout(mainWidget, 0, spacingHint()); for (int i = 0; i < 2; ++i) { if ( i == 1 ) { QFrame *frame = new QFrame(mainWidget); frame->setFrameStyle(QFrame::HLine | QFrame::Sunken); layout->addWidget(frame); } QGridLayout *grid = new QGridLayout(layout); grid->setRowStretch(0, 0); grid->setRowStretch(1, 0); grid->setRowStretch(2, 1); grid->setColStretch(0, 0); grid->setColStretch(1, 1); grid->setColStretch(2, 0); grid->setColStretch(3, 1); grid->setColStretch(4, 2); QString versionident = (i==0)? i18n("Revision A:") : i18n("Revision B:"); QLabel *versionlabel = new QLabel(versionident, mainWidget); grid->addWidget(versionlabel, 0, 0); revbox[i] = new QLabel(mainWidget); revbox[i]->setFrameStyle(QFrame::Panel | QFrame::Sunken); grid->addWidget(revbox[i], 0, 1, Qt::AlignVCenter); QLabel *selectlabel = new QLabel(i18n("Select by tag:"), mainWidget); grid->addWidget(selectlabel, 0, 2); tagcombo[i] = new QComboBox(mainWidget); QFontMetrics fm(tagcombo[i]->fontMetrics()); tagcombo[i]->setMinimumWidth(fm.width("X")*20); grid->addWidget(tagcombo[i], 0, 3); QLabel *authorlabel = new QLabel(i18n("Author:"), mainWidget); grid->addWidget(authorlabel, 1, 0); authorbox[i] = new QLabel(mainWidget); authorbox[i]->setFrameStyle(QFrame::Panel | QFrame::Sunken); grid->addWidget(authorbox[i], 1, 1); QLabel *datelabel = new QLabel(i18n("Date:"), mainWidget); grid->addWidget(datelabel, 1, 2); datebox[i] = new QLabel(mainWidget); datebox[i]->setFrameStyle(QFrame::Panel | QFrame::Sunken); grid->addWidget(datebox[i], 1, 3); QLabel *commentlabel = new QLabel(i18n("Comment/Tags:"), mainWidget); grid->addWidget(commentlabel, 2, 0); commentbox[i] = new QTextEdit(mainWidget); commentbox[i]->setReadOnly(true); commentbox[i]->setTextFormat(Qt::PlainText); fm = commentbox[i]->fontMetrics(); commentbox[i]->setMinimumHeight(2*fm.lineSpacing()+10); grid->addMultiCellWidget(commentbox[i], 2, 2, 1, 3); tagsbox[i] = new QTextEdit(mainWidget); tagsbox[i]->setReadOnly(true); tagsbox[i]->setMinimumHeight(2*fm.lineSpacing()+10); grid->addWidget(tagsbox[i], 2, 4); } QWhatsThis::add(revbox[0], i18n("This revision is used when you click " "Annotate.\nIt is also used as the first " "item of a Diff operation.")); QWhatsThis::add(revbox[1], i18n("This revision is used as the second " "item of a Diff operation.")); connect( tagcombo[0], SIGNAL(activated(int)), this, SLOT(tagASelected(int)) ); connect( tagcombo[1], SIGNAL(activated(int)), this, SLOT(tagBSelected(int)) ); connect( this, SIGNAL(user1Clicked()), this, SLOT(annotateClicked()) ); connect( this, SIGNAL(user2Clicked()), this, SLOT(diffClicked()) ); connect( this, SIGNAL(user3Clicked()), this, SLOT(findClicked()) ); setButtonGuiItem(Ok, KGuiItem(i18n("to view something", "&View"),"fileopen")); setButtonGuiItem(Apply, KGuiItem(i18n("Create Patch..."))); setHelp("browsinglogs"); setWFlags(Qt::WDestructiveClose | getWFlags()); QSize size = configDialogSize(partConfig, "LogDialog"); resize(size); KConfigGroupSaver cs(&partConfig, "LogDialog"); tabWidget->setCurrentPage(partConfig.readNumEntry("ShowTab", 0)); updateButtons(); }
LogDialog::LogDialog(KConfig& cfg, QWidget *parent) : QDialog(parent) , cvsService(0) , partConfig(cfg) { QVBoxLayout *mainLayout = new QVBoxLayout; setLayout(mainLayout); splitter = new QSplitter(Qt::Vertical, this); mainLayout->addWidget(splitter); tree = new LogTreeView(this); connect( tree, SIGNAL(revisionClicked(QString,bool)), this, SLOT(revisionSelected(QString,bool)) ); QWidget* listWidget = new QWidget(this); QVBoxLayout* listLayout = new QVBoxLayout(listWidget); QHBoxLayout* searchLayout = new QHBoxLayout(); listLayout->addLayout(searchLayout); list = new LogListView(partConfig, listWidget); listLayout->addWidget(list, 1); KTreeWidgetSearchLine* searchLine = new KTreeWidgetSearchLine(listWidget, list); QLabel* searchLabel = new QLabel(i18n("Search:"),listWidget); searchLabel->setBuddy(searchLine); searchLayout->addWidget(searchLabel); searchLayout->addWidget(searchLine, 1); connect( list, SIGNAL(revisionClicked(QString,bool)), this, SLOT(revisionSelected(QString,bool)) ); plain = new LogPlainView(this); connect( plain, SIGNAL(revisionClicked(QString,bool)), this, SLOT(revisionSelected(QString,bool)) ); tabWidget = new QTabWidget; tabWidget->addTab(tree, i18n("&Tree")); tabWidget->addTab(listWidget, i18n("&List")); tabWidget->addTab(plain, i18n("CVS &Output")); splitter->addWidget(tabWidget); splitter->setStretchFactor(0, 1); connect(tabWidget, &QTabWidget::currentChanged, this, &LogDialog::tabChanged); tree->setWhatsThis( i18n("Choose revision A by clicking with the left " "mouse button,\nrevision B by clicking with " "the middle mouse button.")); QWidget *mainWidget = new QWidget; splitter->addWidget(mainWidget); QBoxLayout *layout = new QVBoxLayout(mainWidget); layout->setMargin(0); for (int i = 0; i < 2; ++i) { if ( i == 1 ) { QFrame *frame = new QFrame(mainWidget); frame->setFrameStyle(QFrame::HLine | QFrame::Sunken); layout->addWidget(frame); } QGridLayout *grid = new QGridLayout(); layout->addLayout( grid ); grid->setRowStretch(0, 0); grid->setRowStretch(1, 0); grid->setRowStretch(2, 1); grid->setColumnStretch(0, 0); grid->setColumnStretch(1, 1); grid->setColumnStretch(2, 0); grid->setColumnStretch(3, 1); grid->setColumnStretch(4, 2); QString versionident = (i==0)? i18n("Revision A:") : i18n("Revision B:"); QLabel *versionlabel = new QLabel(versionident, mainWidget); grid->addWidget(versionlabel, 0, 0); revbox[i] = new QLabel(mainWidget); revbox[i]->setFrameStyle(QFrame::Panel | QFrame::Sunken); revbox[i]->setTextInteractionFlags(Qt::TextSelectableByMouse); grid->addWidget(revbox[i], 0, 1, Qt::AlignVCenter); QLabel *selectlabel = new QLabel(i18n("Select by tag:"), mainWidget); grid->addWidget(selectlabel, 0, 2); tagcombo[i] = new KComboBox(mainWidget); QFontMetrics fm(tagcombo[i]->fontMetrics()); tagcombo[i]->setMinimumWidth(fm.width("X")*20); grid->addWidget(tagcombo[i], 0, 3); QLabel *authorlabel = new QLabel(i18n("Author:"), mainWidget); grid->addWidget(authorlabel, 1, 0); authorbox[i] = new QLabel(mainWidget); authorbox[i]->setFrameStyle(QFrame::Panel | QFrame::Sunken); authorbox[i]->setTextInteractionFlags(Qt::TextSelectableByMouse); grid->addWidget(authorbox[i], 1, 1); QLabel *datelabel = new QLabel(i18n("Date:"), mainWidget); grid->addWidget(datelabel, 1, 2); datebox[i] = new QLabel(mainWidget); datebox[i]->setFrameStyle(QFrame::Panel | QFrame::Sunken); datebox[i]->setTextInteractionFlags(Qt::TextSelectableByMouse); grid->addWidget(datebox[i], 1, 3); QLabel *commentlabel = new QLabel(i18n("Comment/Tags:"), mainWidget); grid->addWidget(commentlabel, 2, 0); commentbox[i] = new KTextEdit(mainWidget); commentbox[i]->setReadOnly(true); fm = commentbox[i]->fontMetrics(); commentbox[i]->setMinimumHeight(2*fm.lineSpacing()+10); grid->addWidget(commentbox[i], 2, 1, 1, 3); tagsbox[i] = new KTextEdit(mainWidget); tagsbox[i]->setReadOnly(true); tagsbox[i]->setMinimumHeight(2*fm.lineSpacing()+10); grid->addWidget(tagsbox[i], 0, 4, 3, 1); } buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Help | QDialogButtonBox::Close | QDialogButtonBox::Apply); okButton = buttonBox->button(QDialogButtonBox::Ok); okButton->setShortcut(Qt::CTRL | Qt::Key_Return); connect(okButton, &QPushButton::clicked, this, &LogDialog::slotOk); user1Button = new QPushButton; buttonBox->addButton(user1Button, QDialogButtonBox::ActionRole); user2Button = new QPushButton; buttonBox->addButton(user2Button, QDialogButtonBox::ActionRole); user3Button = new QPushButton; buttonBox->addButton(user3Button, QDialogButtonBox::ActionRole); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); KGuiItem::assign(user1Button, KGuiItem(i18n("&Annotate A"))); KGuiItem::assign(user2Button, KGuiItem(i18n("&Diff"))); KGuiItem::assign(user3Button, KGuiItem(i18n("&Find"))); user3Button->setVisible(false); // initially make the version info widget as small as possible splitter->setSizes(QList<int>() << height() << 10); revbox[0]->setWhatsThis(i18n("This revision is used when you click " "Annotate.\nIt is also used as the first " "item of a Diff operation.")); revbox[1]->setWhatsThis(i18n("This revision is used as the second " "item of a Diff operation.")); connect(tagcombo[0], SIGNAL(activated(int)), this, SLOT(tagASelected(int))); connect(tagcombo[1], SIGNAL(activated(int)), this, SLOT(tagBSelected(int))); connect(user1Button, SIGNAL(clicked()), this, SLOT(annotateClicked())); connect(user2Button, SIGNAL(clicked()), this, SLOT(diffClicked())); connect(user3Button, SIGNAL(clicked()), this, SLOT(findClicked())); connect(buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(slotPatch())); connect(buttonBox, &QDialogButtonBox::helpRequested, this, &LogDialog::slotHelp); KGuiItem::assign(okButton, KGuiItem(i18n("&View A"))); KGuiItem::assign(buttonBox->button(QDialogButtonBox::Apply), KGuiItem(i18n("Create Patch..."))); mainLayout->addWidget(buttonBox); buttonBox->button(QDialogButtonBox::Close)->setDefault(true); setAttribute(Qt::WA_DeleteOnClose, true); KConfigGroup cg(&partConfig, "LogDialog"); tabWidget->setCurrentIndex(cg.readEntry("ShowTab", 0)); restoreGeometry(cg.readEntry<QByteArray>("geometry", QByteArray())); splitter->restoreState(cg.readEntry<QByteArray>("Splitter", QByteArray())); updateButtons(); }