Skip to content

(WIP) Create Adjascency and Incidence matrix

Boa noite, meu nome é Levi e essa daqui é a branch GCES-UnB-Levi-gerarMatrizAdjInc que fiz para poder resolver a issue "Criar Matriz de Adjacência e Incidência.

Para o próximo que for pegar esse projeto e essa issue, primeira mente tem que estar com as configurações certas. Primeiramente esse daqui é o canal para o grupo do telegram do KDE Brasil: https://t.me/joinchat/R9bHaMqVkPnNpTgv.

Por exemplo para realizar o build, eu e mais alguns colegas fizemos a partir desse tutorial: https://invent.kde.org/sdk/kdesrc-build Porém, em alguns casos deu muito problema em relação as dependências, e varia de cada máquina. As maquinas recomendadas são essas: OpenSUSE Tumbleweed, Fedora, Ubuntu 22.04. Eu consegui pelo ubuntu seguindo as recomendasções.

O Rocs tem uma documentação que é fraca, mas ainda assim tem: https://docs.kde.org/trunk5/en/rocs/rocs/index.html.

Certo, se seu build deu certo, normalmente toda vez que você for codar, logo quando você liga sua máquina, vai ter que seguir os seguintes passos no terminal: source kde/build/rocs/prefix.sh rocs // para ver se o comando bash tá funcionando Para rebuildar o projeto sem precisar ficar puxando o git da education, rode o seguinte comando na pasta kdesrc-build: ./kdesrc-build rocs --no-include-dependecies --no-src

LEMBRANDO QUE OQUE ESTÁ SENDO ESCRITO É SOMENTE DEPOIS DO BUILD TER DADO CERTO PELO TUTORIAL DA INVENT.KDE.ORG

Certo, o que está feito até agora vão ser os seguintes arquivos com suas escritas (Me perdoem por colocar o código direto, não sei o que ocorreu mais não consigo consertar meu git para subir os código para o kde, dá remote rejected por falha de autenticação por nome):

No rocs, na pasta src/ui/ é para criar os seguintes arquivos: matrixwidget.cpp matrixwidget.h matrixwidget.ui

No arquivo matrixwidget.cpp, insere o seguinte código:

/*

  • SPDX-FileCopyrightText: 2012-2014 Andreas Cord-Landwehr cordlandwehr@kde.org
  • SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL */

#include "matrixwidget.h"

#include "project/project.h"

#include

#include

#include

#include

#include

#include

#include <KTextEditor/Document>

MatrixWidget::MatrixWidget(QWidget* parent)

: QWidget(parent)

, m_currentProject(nullptr)

{

ui = new Ui::MatrixWidget;

ui->setupUi(this);

ui->matrix->setRowCount(8);

ui->matrix->setColumnCount(4);


for (int i=1; i<=4; i++){
    for(int j=1; j<=8; j++) {
        QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg((j+1)*(i+1)));
        ui->matrix->setItem(j, i, newItem);
    }
}

qDebug() << "PlaceHorder Matrix";

}

void MatrixWidget::openMatrix(Project *project) { m_currentProject = project;

if (!project) {

    qCritical() << "No project specified! Cannot set journal widget.";

    return;
}

qDebug() << "Chamei OpenMatrix";

// explicitly set journal to be unmodified, since setting of text to editor caused modifed

// value to be true

}

Uma observação é que nesse arquivo, a matriz de adjacência está sendo populada

No arquivo matrixwidget.h, insere o seguinte código:

/*

  • SPDX-FileCopyrightText: 2012-2014 Andreas Cord-Landwehr cordlandwehr@kde.org
  • SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL */

#ifndef MATRIXWIDGET_H

#define MATRIXWIDGET_H

#include

#include "ui_matrixwidget.h"

class Project;

/**

  • \class JournalEditorWidget
  • This class contains a UI to edit a project's journal file. The journal is presented as
  • a rich text editor window and saved as HTML. */

class MatrixWidget : public QWidget { Q_OBJECT

public: /** * Default constructor. */

explicit MatrixWidget(QWidget* parent);

void openMatrix(Project* project);

private:

Project *m_currentProject;

Ui::MatrixWidget *ui;

};

#endif

No arquivo matrixwidget.ui, insere o seguinte código:

MatrixWidget

<x>0</x>

<y>0</y>

<width>400</width>

<height>300</height>
<widget class="QGroupBox" name="groupBox">

 <property name="title">

  <string>Adjacency Matrix and Incidence Matrix</string>

 </property>

 <layout class="QGridLayout" name="gridLayout_2">

  <item row="0" column="0">

   <widget class="QTableWidget" name="matrix">

   </widget>

  </item>

 </layout>

</widget>

KRichTextEdit

KTextEdit

krichtextedit.h

KTextEdit

QTextEdit

ktextedit.h

KRichTextWidget

KRichTextEdit

krichtextwidget.h

Certo, esses são os arquivos criados, agora vamos inserir a Widget da matriz no arquivo mainwindow.cpp, que esta na pasta src/ui/ também:

Na linha 54:

#include "ui/matrixwidget.h"

A partir da linha 229:

MatrixWidget* m_matrixWidget = new MatrixWidget(this); sideDock->addDock(m_matrixWidget, i18nc("@title", "Matrix"), QIcon::fromTheme("x-office-spreadsheet"));

Agora, voltando uma página, na src/, vamos inserir a Widget para ser buildada junto com o projeto, no arquivo CMakeLists.txt, adiciona os seguintes códigos:

Na linha 30, dentro do target_sources:

ui/matrixwidget.cpp

Na linha 53, dentro do ki18n_wrap_ui:

ui/matrixwidget.ui

Certo, isso é o que tem de pronto nessa issue. Para os próximos passos, é preciso fazer mais uma interface para a matriz de incidência; em vez de popular a matriz de adjacência, ler os dados vindos tantos dos grafos criados a mão como dos arquivos testes de javascript para popular as matrizes.

Obrigado pela atenção!! Precisando de algo, @levi_queiroz27 é meu usuário do telegram.

Edited by Levi Queiroz

Merge request reports