[Qt-creator] Which plugins are you working on?

Jochen Becher jochen_becher at gmx.de
Sat May 30 17:59:57 CEST 2015


Hello Hermann,

do you really need all these new modes?

In my company we use two plugins with complex Ui: a special
peer-code-review plugin and modelling plugin. Both are implemented using
editors only instead of modes. 

An editor can have much more widgets than just a single editor widget.
For example the modelling plugin uses a QGraphicsView for diagrams, a
tree widget presenting the model, a scroll area presenting the
properties of a selected model element and a vertical tool bar.

Regards, Jochen


Am Samstag, den 30.05.2015, 15:07 +0200 schrieb Hermann Fieger:
> 
> Hi Tobias, hi everybody,
> 
> at the moment i'm working on about six plugins for QtCreator.
> 
> 1. a HTML Editor with a previewer ( with Syntax  highlighting, also
> for php and javascript)
> 2. a Python3 Editor with a runtime environment for Qt5 and a ".ui"
> converter from XML to python code
> 3. a runtime only plugin for previous point, mainly planned at the
> moment for measurement purposes
> 4. a 3F5-Spice Derivate with GUI
> 5. a connection plugin which very simplifies making connections
> through TCP, UDP, RS232, VNC, GPIB, LXI, USBTMC ...
> 6. a NC-Code editor with syntax highlighting
> 
> and i also plan to implement a few other things (2D-constructing and
> painting, OPENGL, ...).
> 
> The plugins are all in a beta state and are growing with daily demands
> for my work.
> 
> At the moment i run into a small problem. All most all plugin's
> possess an own "mode" button on the left side of
> QtCreator. 
> 
> For now, i work with "imported projects". Working this way QtCreator
> creates a "xxx.creator" project-file.
> In this project-file I’m able to add files of all mime types. On the
> left side I’ve opened two project manager
> windows, an open project tree and an open document windows. 
> 
> For all mime types i use, I've registered an own mime-type like
> "text/x-myblabla".
> If i doubleclick a file for the first time in the project-tree the
> right editor will be opened and also the right
> mode will be activated. If i click back to an already opened file
> ( wether in the project tree or in the open 
> documents ) the right document(placeholder) is displayed, but in the
> false mode. So you maybe run a python file
> within the Spice environment. This is "not nice", because i always
> have to press the right mode button manually.
> 
> As already said earlier times, i use QtCreator as a great host system
> for my own applications, which i implement
> as plugins. 
> 
> After debugging for a while, i found following code segment in
> "editormanager.cpp", which i think is
> responsible for this behaviour ( It's out of QtCreator 3.0! ):
> 
> 
> Core::IEditor
> *EditorManager::activateEditor(Core::Internal::EditorView *view,
> Core::IEditor *editor, OpenEditorFlags flags)
> {
>     Q_ASSERT(view);
>     if (!editor) {
>         if (!d->m_currentEditor)
>             setCurrentEditor(0, (flags & IgnoreNavigationHistory));
>         return 0;
>     }
>     editor = placeEditor(view, editor);
>     if (!(flags & DoNotChangeCurrentEditor)) {
>         setCurrentEditor(editor, (flags & IgnoreNavigationHistory));
>         if (!(flags & DoNotMakeVisible)) {
>             // switch to design mode?
>             if (editor->isDesignModePreferred()) {
> 
> ModeManager::activateMode(Core::Constants::MODE_DESIGN);
>                 ModeManager::setFocusToCurrentMode();
>             } else {
>                 int rootIndex;
>                 findRoot(view, &rootIndex);
>                 if (rootIndex == 0) // main window --> we might need
> to switch mode
>                     if (!editor->widget()->isVisible())
> 
> ModeManager::activateMode(Core::Constants::MODE_EDIT);
>                 editor->widget()->setFocus();
>                 ICore::raiseWindow(editor->widget());
>             }
>         }
>     } else if (!(flags & DoNotMakeVisible)) {
>         view->setCurrentEditor(editor);
>     }
>     return editor;
> }
> 
> 
> I 've changed it to following code:
> 
> Core::IEditor
> *EditorManager::activateEditor(Core::Internal::EditorView *view,
> Core::IEditor *editor, OpenEditorFlags flags)
> {
>     Q_ASSERT(view);
> 
>     if (!editor) {
>         if (!d->m_currentEditor)
>             setCurrentEditor(0, (flags & IgnoreNavigationHistory));
>         return 0;
>     }
> 
>     editor = placeEditor(view, editor);
> 
>     if (!(flags & DoNotChangeCurrentEditor)) {
>         setCurrentEditor(editor, (flags & IgnoreNavigationHistory));
>         if (!(flags & DoNotMakeVisible)) {
>             // switch to design mode?
>             if (editor->isDesignModePreferred()) {
> 
> ModeManager::activateMode(Core::Constants::MODE_DESIGN);
>                 ModeManager::setFocusToCurrentMode();
>             } else {
>                 int rootIndex;
>                 findRoot(view, &rootIndex);
>                 if (rootIndex == 0) // main window --> we might need
> to switch mode
>                     if (!editor->widget()->isVisible())
> 
> ModeManager::activateMode(Core::Constants::MODE_EDIT);
>                 editor->widget()->setFocus();
>                 ICore::raiseWindow(editor->widget());
> 
> // *** test
> printf("MIME TYPE -->> %s\n",
> editor->document()->mimeType().toAscii().data() ); fflush(stdout);
> 
> if(      ( editor->document()->mimeType() ==
> QLatin1String("text/x-lpython") )
>        ||( editor->document()->mimeType() ==
> QLatin1String("text/x-python" ) ) ) {
> 
>   ModeManager::activateMode( "Mode.LPy" );
> } else if( editor->document()->mimeType() ==
> QLatin1String("text/x-mpython")     ) {
> 
>   ModeManager::activateMode( "Mode.lmcv" );
> } else if( editor->document()->mimeType() ==
> QLatin1String("text/x-spice")     ) {
> 
>   ModeManager::activateMode( "Mode.LSpice" );
> } else if( editor->document()->mimeType() ==
> QLatin1String("text/x-html")      ) {
> 
>   ModeManager::activateMode( "Mode.lweb" );
> } else if( editor->document()->mimeType() ==
> QLatin1String("text/x-gcode")     ) {
> 
>   ModeManager::activateMode( "Mode.lcnc" );
> }
> // *** test
> 
>             }
>         }
>     } else if (!(flags & DoNotMakeVisible)) {
>         view->setCurrentEditor(editor);
>     }
>     return editor;
> }
> 
> Now it works as expected, but has the big disadvantage, always to
> patch this file with every new release of the creator.
> I think this does not only belong to me. QtCreator has only two "main
> modes"( with opened project manager windows ), 
> the designer and the editor mode. These are the two modes, you handle
> in this code segment.
> 
> Now my question.  Would it have any disadvantage to you, if you would
> implement something like this pseudocode?:
> 
> 1. Determine mime-type of triggered document
> ( editor->document()->mimeType() ).
> 2. Was there a mode registered to this mime type?
> 3. Yes, switch to already registered mode.
> 4. No, stay in editor mode.
> 
> With this behaviour many many editors, also binary ones could be
> applied additional without any patching.
> 
> I also have the problem backwards. If i push the mode buttons, i
> should remember the "last" used document for each
> mode(which can be more than one).
> 
> 
> regards, Hermann
> 
> 
> 
> 
> 
> 
> 
> 
> 
> _______________________________________________
> Qt-creator mailing list
> Qt-creator at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/qt-creator





More information about the Qt-creator mailing list