Re: QElectrotech is freezing / loading time library elements

The multi-language wiki was broken during an update. The translated pages no longer appear in the switch.

https://qelectrotech.org/wiki_new/start?do=index

"Le jour où tu découvres le Libre, tu sais que tu ne pourras jamais plus revenir en arrière..."

Re: QElectrotech is freezing / loading time library elements

De-Backer wrote:

and what if we index when we open the folder.
instead of everything at start up?

We load all the collection at the start up for use the search engine. If we not do that the search engine will search only for folder already expanded.
Exactly in the sources code, at the start up of Qet we get all files of the element collection and on each of these files we get the name and the information of the element and that all.
The icon of the element are created when the folder is expanded for both speed up the start of qet and limit the memory foot print of qet.
So load only expanded folder could be a great solution (qelectrotech will start instantly) but we lose the search engine.
A solution could to add in each folder a new file with inside the name and information of each element present in the folder but :
1: we must to write new code for that instead of improve existing (And in current state of devel for the 0.8 I don't make big change, I polish existing before the release)
2: We also write code to update these new files with :
-automatic update when add/remove/update new element
-and manual update if a change are made outside of qet)

May be we will do this in future but I prefer to find a magic solution for improve existing code.

Développeur QElectroTech

Re: QElectrotech is freezing / loading time library elements

De-Backer wrote:

I will first create the doc on my PC and then I will forward it there to you.
I think that can work..

it will be plain .txt text.

Whoo it's a hard job, good luck nomicons/smile and thanks in advance

Développeur QElectroTech

Re: QElectrotech is freezing / loading time library elements

Can this be done?


Uuid used to compare two elements

 The code below is used to keep compatibility with previous version of qet
The uuid store in .elmt file, to compare two elements was created at version svn 4032
@TODO remove this code at version 0.6 or 0.7 (all users should already used the version with uuid)
Compare the xml definition transformed in QString. This method can return a false positive (notably with Qt5,
because the attributes of the xml isn't at the same order,with two instance of qet, for the same element)

git ID 557a2eaa878b8e9d48da1c0256bca0dbfd2d849b 2015-06-28

bdw. I read the .elmt file for the doc, in combination with git.

Re: QElectrotech is freezing / loading time library elements

The search engine filter also on the country language of application selected by user to matche elements name in the query, example :  "bobine" if french language is actived, switch country to english in setting, reload collection and retry your querry with "coil"and see.

"Le jour où tu découvres le Libre, tu sais que tu ne pourras jamais plus revenir en arrière..."

31 (edited by De-Backer 2020-07-27 21:02:17)

Re: QElectrotech is freezing / loading time library elements

grep -w -R 'motor' elements/*

is fast, but I understand.

however there must be a way to find the SW locks (QTimer as watchdog)?

Edit :
no multiple threads

Edit :
... or ... if it lives in the GUI thread then it is possible.

Edit : som info for me.

https://www.kdab.com/the-eight-rules-of … readed-qt/

https://doc.qt.io/qt-5/qcoreapplication … boutToQuit
for
https://github.com/qelectrotech/qelectr … /issues/50

Re: QElectrotech is freezing / loading time library elements

Interesting book:
https://www.amazon.com/dp/1789531241

"Le jour où tu découvres le Libre, tu sais que tu ne pourras jamais plus revenir en arrière..."

Re: QElectrotech is freezing / loading time library elements

Joshua wrote:
De-Backer wrote:

I will first create the doc on my PC and then I will forward it there to you.
I think that can work..

it will be plain .txt text.

Whoo it's a hard job, good luck nomicons/smile and thanks in advance

this is a start

The main XML element is therefore the “definition” tag. In case we have more than one type of definition in the future, we use the type attribute to specify that this is an element definition.

definition
    * Element dimensions 
        One of the first things to specify when defining an element is its size: width (width) and height (height), in pixels. These two dimensions must be integers multiples of 10. If this is not the case, QET will round them to the next ten (example: 50 for 42 pixels). They determine the size and the bounding rectangle of the element.
    - height
    - width 
    * Element hotspot
        The element hooking point designates the point hooked to the mouse cursor during a drag'n drop of the element. They must be full coordinates. “Hotspot_x” is the abscissa, “hotspot_y” is the ordinate. The upper left corner of the rectangle delimiting the element is considered to be the origin. If the values provided exceed the bounding rectangle, they will be limited to the size of the element. The hotspot is also the center of rotation used when changing the orientation of the element.
    - hotspot_x
    - hotspot_y
    * Element orientation
        It is then necessary to define what are the possible orientations of the element. Element orientation is used when laying conductors but also to prevent the user from turning an element in a direction that would not make sense. The orientation attribute is defined by a series of 4 characters, each character defining the behavior for an orientation.
        + 1 st character: North
        + 2 nd character: East
        + 3 rd character: South
        + 4 th character: West
        Each character can have the following value:
        + d for “default”: indicates that, by default, the element is considered to be oriented in this direction. It is absolutely necessary to indicate a default orientation.
        + y for “yes”: the user can orient the element in this direction.
        + n for “no”: the user cannot orient the element in this direction.
        Example: orientation = “ydny” means that the element is drawn facing south and can be turned north and west but not east.
    - orientation
    - link_type ( grep -w -R 'link_type' sources/* )   info from (/sources/factory/elementfactory.cpp)
        -- next_report
        -- master
        -- slave
        -- terminal
    - hotspot_x (grep -w -R 'hotspot_x' sources/*)
    *
    - version
    * 
    - type
    uuid
        * Uuid used to compare two elements 
            The code below is used to keep compatibility with previous version of qet
            The uuid store in .elmt file, to compare two elements was created at version svn 4032
            @TODO remove this code at version 0.6 or 0.7 (all users should already used the version with uuid)
            Compare the xml definition transformed in QString. This method can return a false positive (notably with Qt5,
            because the attributes of the xml isn't at the same order,with two instance of qet, for the same element)
            git ID 557a2eaa878b8e9d48da1c0256bca0dbfd2d849b 2015-06-28
        - uuid
        names
            name
                *
                - lang
                    -- be
                    -- nl
                    -- fr
                    -- 

I have yet to find and link the C ++ code

Re: QElectrotech is freezing / loading time library elements

scorpio810
what is the oldest QT version you still compile?

Re: QElectrotech is freezing / loading time library elements

De-Backer wrote:

scorpio810
what is the oldest QT version you still compile?

Qt 5.9 for Ubuntu Bionic LTS.
https://packages.ubuntu.com/fr/bionic/qt5-qmake
https://wiki.ubuntu.com/Releases

End of Standard Support .... April 2023 ... we will be obliged to drop it before

"Le jour où tu découvres le Libre, tu sais que tu ne pourras jamais plus revenir en arrière..."

36 (edited by De-Backer 2020-07-27 21:57:28)

Re: QElectrotech is freezing / loading time library elements

scorpio810 wrote:
De-Backer wrote:

scorpio810
what is the oldest QT version you still compile?

Qt 5.9 for Ubuntu Bionic LTS.

https://github.com/De-Backer/qelectrote … clean_code

i have removed some code
you can check this if it's ok.

if ok, then I can bring it to the main git repo

(i don't want to pollute the main git repo)

Re: QElectrotech is freezing / loading time library elements

Not much time for the next few days, but I'll try to find some. ;-)

"Le jour où tu découvres le Libre, tu sais que tu ne pourras jamais plus revenir en arrière..."

Re: QElectrotech is freezing / loading time library elements

Joshua wrote:
De-Backer wrote:

and what if we index when we open the folder.
instead of everything at start up?

We load all the collection at the start up for use the search engine. If we not do that the search engine will search only for folder already expanded.

we can't put the search function in a worker thread?
I notice the gui freezes when entering text.

Re: QElectrotech is freezing / loading time library elements

scorpio810 wrote:

Not much time for the next few days, but I'll try to find some. ;-)

no problem,i have faith in "git merge"

Re: QElectrotech is freezing / loading time library elements

Has JSON ever been proposed as a file for the elements?
I am asking this because the search function returns NULL.
Perhaps this can be faster than XML.
It is certainly more readable than XML.

41 (edited by Joshua 2020-07-28 22:19:16)

Re: QElectrotech is freezing / loading time library elements

De-Backer wrote:

Has JSON ever been proposed as a file for the elements?
I am asking this because the search function returns NULL.
Perhaps this can be faster than XML.
It is certainly more readable than XML.

No JSON was not proposed.
Elements file are in xml and will stay xml for the following reasons :
-It's the original file format and everything in the code about element are for xml.
-Elements are embedded in the .qet file and .qet file is xml, we don't embedded a JSON collection inside the xml of the .qet.
-JSON need to write new code and so need lot of time and debbuging.
-Not retrocompatible with xml element file (or have two codes, one for xml another for JSON, a big headache and a big sources of bug and weird behavior)
-I think JSON is not faster than xml (pugi xml vs Qt JSON) and if so I think we will don't gain a lot.
They look the problem come from  how Windows access to file, I search if something like ram disk can improve the loading of collection.
Don't forget even if qet start-up on windows is slow, he is much faster than before since we use pugixml and multithreading..... but I hope we can do better nomicons/wink

Développeur QElectroTech

42 (edited by De-Backer 2020-07-29 16:43:26)

Re: QElectrotech is freezing / loading time library elements

Ok thanks, can there be any changes before /*for*/ 0.8 due to the file structure?
I am asking this because I am asked to number the contact points of each element.
(for Terminal block generator)
And if you have any idea how that is planned, let me know.

edited
for => before


I made a start for the wiki:
https://github.com/De-Backer/qelectrote … irror/wiki

Re: QElectrotech is freezing / loading time library elements

De-Backer wrote:

can there be any changes before /*for*/ 0.8 due to the file structure?
I am asking this because I am asked to number the contact points of each element.
(for Terminal block generator)
And if you have any idea how that is planned, let me know.

No there is no change on the file format for the 0.8.
Martin work on a harness feature and if I remember well add terminal number.
The 0.8 dev is now in a state of stabilization before the release, I only add minor change and bug fix.
For the 0.9 version, I will create integrated terminal strip generator, it was previously planned for the 0.8 but the 0.7 begin to be a little old. I prefer release around one version by year.

Nice your wiki nomicons/wink

Développeur QElectroTech

Re: QElectrotech is freezing / loading time library elements

Thanks for the head up.

The 0.8 dev is now in a state of stabilization

I am making a test to make all the elements in 1 file to see the loading difference

Re: QElectrotech is freezing / loading time library elements

for  QElectrotech is freezing

static int BACKUP_INTERVAL = 120000; //interval in ms of backup = 2min
/**
 * @brief QETProject::init
 */
void QETProject::init()
{
    connect(&m_titleblocks_collection, &TitleBlockTemplatesCollection::changed, this, &QETProject::updateDiagramsTitleBlockTemplate);
    connect(&m_titleblocks_collection, &TitleBlockTemplatesCollection::aboutToRemove, this, &QETProject::removeDiagramsTitleBlockTemplate);

    m_undo_stack = new QUndoStack(this);
    connect(m_undo_stack, SIGNAL(cleanChanged(bool)), this, SLOT(undoStackChanged(bool)));

    m_save_backup_timer.setInterval(BACKUP_INTERVAL);
    connect(&m_save_backup_timer, &QTimer::timeout, this, &QETProject::writeBackup);
    m_save_backup_timer.start();
    writeBackup();

this cannot be stopped: in de setting

m_save_backup_timer.setInterval(BACKUP_INTERVAL);
    connect(&m_save_backup_timer, &QTimer::timeout, this, &QETProject::writeBackup);
    m_save_backup_timer.start();

runs :

/**
 * @brief QETProject::writeBackup
 * Write a backup file of this project, in the case that QET crash
 */
void QETProject::writeBackup()
{
    if (!m_backup_file ||
        (!m_backup_file->isOpen() && !m_backup_file->open(QIODevice::ReadWrite))) {
        return;
    }

    QDomDocument xml_project(toXml());
    QET::writeToFile(xml_project, m_backup_file);
}

in de gui thread

Re: QElectrotech is freezing / loading time library elements

De-Backer wrote:

I made a start for the wiki:
https://github.com/De-Backer/qelectrote … irror/wiki

I copied your pages, tomorrow I will add you if you want to write on the Github Wiki.
https://github.com/qelectrotech/qelectr … irror/wiki

"Le jour où tu découvres le Libre, tu sais que tu ne pourras jamais plus revenir en arrière..."

Re: QElectrotech is freezing / loading time library elements

sure, no problem.
I have not finished adding info, so expect me to ask you som questions.
-about design choice
-and many other relevant things.

Re: QElectrotech is freezing / loading time library elements

Where is the multi thread in QElectroTech?

Is it QtConcurrent?
https://doc.qt.io/qt-5/qtconcurrent-index.html

Or are there others?

Re: QElectrotech is freezing / loading time library elements

De-Backer wrote:

Where is the multi thread in QElectroTech?

Is it QtConcurrent?
https://doc.qt.io/qt-5/qtconcurrent-index.html

Or are there others?

https://doc.qt.io/qt-5/qfuture.html
https://git.tuxfamily.org/qet/qet.git/t … l.cpp#n216

"Le jour où tu découvres le Libre, tu sais que tu ne pourras jamais plus revenir en arrière..."

50 (edited by De-Backer 2020-08-04 20:12:19)

Re: QElectrotech is freezing / loading time library elements

scorpio810 wrote:
De-Backer wrote:

Where is the multi thread in QElectroTech?

Is it QtConcurrent?
https://doc.qt.io/qt-5/qtconcurrent-index.html

Or are there others?

https://doc.qt.io/qt-5/qfuture.html
https://git.tuxfamily.org/qet/qet.git/t … l.cpp#n216

yes is this the only thing? (did I already see in the code)
proposal: to run the storage in another thread

"" Write a backup file of this project, in the case that QET crash"""

QtConcurrent::run(QThreadPool::globalInstance(), function, ...);
De-Backer wrote:

for  QElectrotech is freezing

static int BACKUP_INTERVAL = 120000; //interval in ms of backup = 2min
/**
 * @brief QETProject::init
 */
void QETProject::init()
{
    connect(&m_titleblocks_collection, &TitleBlockTemplatesCollection::changed, this, &QETProject::updateDiagramsTitleBlockTemplate);
    connect(&m_titleblocks_collection, &TitleBlockTemplatesCollection::aboutToRemove, this, &QETProject::removeDiagramsTitleBlockTemplate);

    m_undo_stack = new QUndoStack(this);
    connect(m_undo_stack, SIGNAL(cleanChanged(bool)), this, SLOT(undoStackChanged(bool)));

    m_save_backup_timer.setInterval(BACKUP_INTERVAL);
    connect(&m_save_backup_timer, &QTimer::timeout, this, &QETProject::writeBackup);
    m_save_backup_timer.start();
    writeBackup();

this cannot be stopped: in de setting

m_save_backup_timer.setInterval(BACKUP_INTERVAL);
    connect(&m_save_backup_timer, &QTimer::timeout, this, &QETProject::writeBackup);
    m_save_backup_timer.start();

runs :

]/**
* @brief QETProject::writeBackup
* Write a backup file of this project, in the case that QET crash
*/

void QETProject::writeBackup()
{
    if (!m_backup_file ||
        (!m_backup_file->isOpen() && !m_backup_file->open(QIODevice::ReadWrite))) {
        return;
    }
 
    QDomDocument xml_project(toXml());
    QET::writeToFile(xml_project, m_backup_file);
}

in de gui thread