рдЯреАрдбреАрдУ рдкреНрд▓рдЧрдЗрди QtCreator рдХреЗ рд▓рд┐рдП

рдЗрд╕рд▓рд┐рдП, рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП, рдЖрджрд░рдгреАрдп рдпреВрдЬреАрди рдиреЗ рд╣рдореЗрдВ QtCreator рд╣реИрдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ , рдФрд░ рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рднреА рджрд┐рдЦрд╛рдпрд╛ ред рдФрд░ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдПрдХ рджреЗрд╢ рдХреЗ рдШрд░ рдореЗрдВ рд╕рднреНрдпрддрд╛ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдлрд╛рдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдкреНрд▓рдЧрдЗрди рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдЦреБрд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕рднреА TODO, FIXME, рдЖрджрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдиреАрдЪреЗ рдореИрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдкреНрд▓рдЧрдЗрди рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдо рддреМрд░ рдкрд░ QtCreator рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

TODO Plugin





рд╢реБрд░реБрдЖрдд



рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЬреЛ рдЪреАрдЬ рдЪрд╛рд╣рд┐рдП, рд╡рд╣ рд╣реИ рдХреНрдпреВрдЯреАрдХреНрд░реЗрдЯрд░ рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛, рдЖрдк рдпрд╣рд╛рдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм, рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдореА рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ / src / plugins / folder рдореЗрдВ рдПрдХ рдирдпрд╛ рдЦрд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред



рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдПрдВ рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ



рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдореБрдЦреНрдп рд╡рд░реНрдЧ рд╣реЛрдЧрд╛; рдЗрд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рдирд╕рд┐рд╕реНрдЯрдо :: IPlugin рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, .pro рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:

рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ (../../ qtcreatorplugin.pri)

рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (../../ plugins / coreplugin / coreplugin.pri)



Coreplugin рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рдпрд╣ рдЕрдиреНрдп рдкреНрд▓рдЧрдЗрдиреНрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред



рдЖрдкрдХреЛ рдирд┐рдореНрди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ xml рдлрд╝рд╛рдЗрд▓ <рдкреНрд▓рдЧрдЗрди рдирд╛рдо> .pluginspec рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА

<рдкреНрд▓рдЧрдЗрди рдХрд╛ рдирд╛рдо = "todo" рд╕рдВрд╕реНрдХрд░рдг = "0.0.1" рдХрдВрдкреЗрдЯрд╡рд░реНрд╕рди = "2.0.0">

<рд╡рд┐рдХреНрд░реЗрддрд╛> vsorokin </ рд╡рд┐рдХреНрд░реЗрддрд╛>

<рдХреЙрдкреАрд░рд╛рдЗрдЯ> рдЖрдкрдХрд╛ рдХреЙрдкреАрд░рд╛рдЗрдЯ </ рдХреЙрдкреАрд░рд╛рдЗрдЯ>

<рд▓рд╛рдЗрд╕реЗрдВрд╕> рдЖрдкрдХрд╛ рд▓рд╛рдЗрд╕реЗрдВрд╕ </ рд▓рд╛рдЗрд╕реЗрдВрд╕>

<рд╡рд┐рд╡рд░рдг> рдкреНрд▓рдЧрдЗрди рд╡рд┐рд╡рд░рдг </ рд╡рд░реНрдгрди>

<url> рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореБрдЦрдкреГрд╖реНрда </ url>

<DependencyList>

<рдирд┐рд░реНрднрд░рддрд╛ рдирд╛рдо = "рдХреЛрд░" рд╕рдВрд╕реНрдХрд░рдг = "2.0.0" />

</ DependencyList>

</ рдкреНрд▓рдЧрдЗрди>



рдЙрдирдХреЗ рдирд╛рдо рд╕реЗ рдЦреЗрддреЛрдВ рдХрд╛ рдЕрд░реНрде рд╕реНрдкрд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИред



рддреЛ, рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╡рд░реНрдЧ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

#include <extensionystem / iplugin.h>



рд╡рд░реНрдЧ рдЯреЛрдбреЛрдкреНрд▓реБрдЬрд┐рди: рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рдкреНрд░рдгрд╛рд▓реА :: рдЖрдИрдкреАрд▓реБрдЧрд┐рди

{

Q_OBJECT

рдЬрдирддрд╛ :

рдЯреЛрдбреЛрдкреНрд▓реБрдЬрд┐рди ();

~ рдЯреЛрдбреЛрдкреНрд▓реБрдЬрд┐рди ();

рд╢реВрдиреНрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди

рдмреВрд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ ( const QStringList & рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯреНрд╕, QString * errorString);

рд╢реВрдиреНрдп рдмрдВрдж ();

};



* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реЗрдВрдЯреНрд░рд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рддрд░реАрдХрд╛ рд╣реИ, рдЬреЛ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдЦрд╛рд▓реА рд╣реИрдВред



рдПрдХ рдирдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреЗрди рдмрдирд╛рдПрдВ



рдореЗрд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХреНрд╖реЗрддреНрд░ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдореМрдЬреВрджрд╛ рд╡рд╛рд▓реЗ рдХреЗ рдмрдЧрд▓ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╕ рдХреЛрд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ : IOutputPane рдЗрдВрдЯрд░рдлрд╝реЗрд╕ , рдпрд╣рд╛рдВ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рд╢реАрд░реНрд╖рдХ рд╣реИ:

#include <coreplugin / ioutputpane.h>

# рдЕрд▓рдЧ рдХрд░реЗрдВ <QObject>

#include <QListWidget>



рд╡рд░реНрдЧ рдЯреВрдбреВрдУрдЯрдкреНрдпреВрдЯреЗрди: рдкрдмреНрд▓рд┐рдХ рдХреЛрд░ :: IOutputPane

{

рдЬрдирддрд╛ :

рдЯреЛрдбреЛрдЙрдкреБрддрдкрд╛рдиреЗ (QObject * рдЬрдирдХ);

~ рдЯреЛрдбреЛрдУрдкреБрддрдкрд╛рдиреЗ ();



QWidget * outputWidget (QWidget * рдЬрдирдХ); // рдХреНрд▓рд╛рд╕ рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЬреЗрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрд╣рд╛рдБ рдпрд╣ QListWidget рд╣реИ

QList <QWidget *> toolBarWidgets () рдХрд╛рд╕реНрдЯ; // рдЯреВрд▓рдмрд╛рд░ рд╡рд┐рдЬреЗрдЯ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд╡реЗ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ

QString рдирд╛рдо () рдХрд╛рд╕реНрдЯ ; // рдмрд╕ рдкреИрдирд▓ рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХ рдирд╛рдо



int рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдЗрдиреНрд╕реНрдЯреИрдЯрдмрд╕рд░ () рдХрд╛рд╕реНрдЯ ; // рдПрдХ рд╕реЗ рдПрдХ рд╕реМ рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рддрдиреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛, рдЙрддрдиреА рд╣реА рдЙрдЪреНрдЪ рд╕реНрдерд┐рддрд┐ рд╣рдорд╛рд░реА рдлрд▓рдХ



рд╢реВрдиреНрдп рд╕рдорд╛рд╢реЛрдзрди (); // рдореБрдЦреНрдп рд╡рд┐рдЬреЗрдЯ рдХреА рд╕рдлрд╛рдИ рдХрд░рддрд╛ рд╣реИ

рд╢реВрдиреНрдп рджреГрд╢реНрдпрддрд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд ( рдмреВрд▓ рджрд┐рдЦрд╛рдИ);



рд╢реВрдиреНрдп рд╕реЗрдЯрдлреЛрдХрд╕ ();

рдмреВрд▓ рд╣реИрдлреЛрдХрд╕ ();

рдмреВрд▓ рдХреИрдирдлреЛрдХрд╕ ();



рдмреВрд▓ рдХреИрдирд╡реЗрдЯ ();

рдмреВрд▓ рдХреИрдиреЗрдХреНрд╕реНрдЯ ();

рдмреВрд▓

рд╢реВрдиреНрдп goToNext ();

рд╢реВрдиреНрдп goToPrev ();



рд╢реВрдиреНрдп addItem (QString рдкрд╛рда, QString рдлрд╝рд╛рдЗрд▓, int rowNumber); // рд╡рд┐рдзрд┐ рдЬреЛ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреА рд╣реИ

QListWidget * getTodoList () рдХрд╛рд╕реНрдЯ; // рдПрдХ рд╕реВрдЪреА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ



рдирд┐рдЬреА :

QListWidget * рдЯреВрдбрд▓рд┐рд╕реНрдЯ;

};



* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред




рдЕрдм рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрдкрдиреЗ рдирдП рдмрдирд╛рдП рдЧрдП рдЯреВрдбреВрдкрди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

outPane = new TodoOutputPane ( рдпрд╣ );

addAutoReleasedObject (outPane);



* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдЕрдм рд╣рдорд╛рд░рд╛ рдЖрдЙрдЯрдкреЗрди рдмрд╛рдХреА рдХреЗ рдмреАрдЪ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред



рд╣рдореЗрдВ рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИ рдФрд░ рдЙрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ



рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЕрдм рдХреМрди рд╕реА рдлрд╝рд╛рдЗрд▓ рдЦреБрд▓реА рд╣реИ, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕рдВрдкрд╛рджрдХ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ ...

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд╢реАрд░реНрд╖ рд▓реЗрдЦ рдЬреЛрдбрд╝реЗрдВ:

#include <coreplugin / editormanager / editormanager.h>

#include <coreplugin / editormanager / ieditor.h>



* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдФрд░ рдЖрд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:

рдХрдиреЗрдХреНрдЯ (рдХреЛрд░ :: EditorManager :: рдЙрджрд╛рд╣рд░рдг) (), SIGNAL (currentEditorChanged (рдХреЛрд░ :: IEditor *)), рдпрд╣ , SLOT (currentEditorChanged (рдХреЛрд░ :: IEditor *));



* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕реНрд▓реЙрдЯ рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВрдЕрдиреБрдХреВрд▓рд┐рдд рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ (рдХреЛрд░ :: IEditor *)

рд╣рд░ рдмрд╛рд░ рд╡рд░реНрддрдорд╛рди рд╕рдВрдкрд╛рджрдХ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рдж рдЗрд╕ рд╕реНрд▓реЙрдЯ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛рдиреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рд╛ / рдмрдВрдж рдХрд┐рдпрд╛, рдпрд╛ рдХрд┐рд╕реА рджреВрд╕рд░реЗ рдХреЛ рдЦреЛрд▓рд╛ рд╣реБрдЖ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ред

рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рд╢реВрдиреНрдп рдЯреЛрдбрдкреНрд▓рдЧрд┐рди :: currentEditorChanged (рдХреЛрд░ :: IEditor * рд╕рдВрдкрд╛рджрдХ)

{

outPane-> clearContents (); // рд╕рд╛рдлрд╝

рдЕрдЧрд░ (рд╕рдВрдкрд╛рджрдХ) // рдЪреЗрдХ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рд╕рдВрдкрд╛рджрдХ рд╣реИ? рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░

{

рд╡рд╛рдкрд╕реА;

}

/ * рдкрддрд▓рд╛ рдмрд┐рдВрджреБ, рд╣рдо рд╡рд░реНрддрдорд╛рди рд╕рдВрдкрд╛рджрдХ рд╕реЗ рдЬреБрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд╕рдВрдХреЗрдд рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Ctrl + S * / рджрдмрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝ рд╕рдХреЗрдВ

рдХрдиреЗрдХреНрдЯ (рд╕рдВрдкрд╛рджрдХ-> рдлрд╝рд╛рдЗрд▓ (), SIGNAL (рдкрд░рд┐рд╡рд░реНрддрд┐рдд) (), рдпрд╣ , SLOT (fileChanged ()));

QString fileName = editor-> file () -> fileName (); // рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

readFile (fileName); // рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред

}



* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдпрд╣рд╛рдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рд░рд▓ рд╣реИ:

рд╢реВрдиреНрдп рдЯреЛрдбрдкреНрд▓рдЧрд┐рди :: readFile (QString рдлрд╝рд╛рдЗрд▓рдирд╛рдо)

{

QFile рдлрд╝рд╛рдЗрд▓ (fileName);

рдЕрдЧрд░ (file.open (QFile :: ReadOnly | QFile :: Text))

рд╡рд╛рдкрд╕реА;

int i = 1;

рдЬрдмрдХрд┐ (file.atEnd ())

{

QString currentLine = file.readLine ();

рдЕрдЧрд░ (currentLine.contains (QRegExp (patternString, Qt :: CaseInsensitive)))

{

outPane-> addItem (currentLine, fileName, i);

}

++ рдореИрдВ;

}

}



* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред




рдЖрдкрдХреЛ рдПрдХ рдирдП рд╕реНрд▓реЙрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗ рдЬрд╛рдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ:

рд╢реВрдиреНрдп рдЯреЛрдбрдкреНрд▓реБрдЧрд┐рди :: рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрд┐рдд ()

{

outPane-> clearContents ();

рдХреЛрд░ :: IFile * рдлрд╝рд╛рдЗрд▓ = (Core :: IFile *) рдкреНрд░реЗрд╖рдХ (); // рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдЧреИрд░-рд░реВрдврд╝рд┐рд╡рд╛рджреА рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рд╕рдВрдХреЗрдд рдЗрд╕ рд╕реНрд▓реЙрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред

рдЕрдЧрд░ (рдлрд╝рд╛рдЗрд▓)

{

readFile (рдлрд╝рд╛рдЗрд▓-> fileName ());

}

}



* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред




рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рдирд╛



рдЕрдм рдЖрдкрдХреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рд╡рд┐рдзрд┐:

void TodoOutputPane :: addItem (QString рдЯреЗрдХреНрд╕реНрдЯ, QString рдлрд╝рд╛рдЗрд▓, int rowNumber)

{

QListWidgetItem * newItem = new QListWidgetItem (); // рдПрдХ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдПрдБ

QRegExp todoExp ( "// \\ s * TODO (:ред \\ s)" , Qt :: CaseInsensitive); // рд░реЗрдЧреЗрдХреНрд╕ рддреИрдпрд╛рд░ рдХрд░реЗрдВ

QRegExp noteExp ( "// \\ s * NOTE (: | \\ s)" , Qt: CaseInsintitive);

QRegExp fixmeExp ( "// \\ s * FIXME ( : | \\ s)" , Qt :: CaseInsensitive);

QRegExp BugExp ( "// \\ s * BUG (: | \\ s)" , Qt :: CaseInsensitive);

QRegExp hackExp ( "// \\ s * HACK (: | \\ s)" , Qt :: CaseInsensitive);



text = text.replace ( "\ n" , "" );

text = text.replace ( "\ r" , "" );



newItem-> setTextColor (QColor ( "# 2F2F2F" ));

if (text.contains (todoExp)) // Regexps рдХреА рддрд▓рд╛рд╢ рдореЗрдВ

{

newItem-> setBackgroundColor (QColor ( "# BFFFC8" )); // рд░рд┐рдХреЙрд░реНрдб рд░рдВрдЧ рд╕реЗрдЯ рдХрд░реЗрдВ

text = text.replace (todoExp, "TODO :;); // рдмрджрд▓реЗрдВ "рд╕рдВрднрд╡рддрдГ рдХреБрдЯрд┐рд▓" рд▓реЗрдмрд▓ рдХреА рд╡рд░реНрддрдиреА рд╕рд╣реА рд╣реИ

newItem-> setIcon (QIcon ( ": / рдЪреЗрддрд╛рд╡рдиреА" )); // рдЖрдЗрдХрди рд╕реЗрдЯ рдХрд░реЗрдВ

}

рдФрд░ рдЕрдЧрд░ (text.contains (noteExp))

{

newItem-> setBackgroundColor (QColor ( "# E2DFFF" ));

text = text.replace (noteExp, тАЬNOTE :;);

newItem-> setIcon (QIcon ( ": / info" ));

}

рдФрд░ рдЕрдЧрд░ (text.contains (bugExp))

{

newItem-> setBackgroundColor (QColor ( "# FFFBFBF" ));

text = text.replace (BugExp, тАЬBUG :;);

newItem-> setIcon (QIcon ( ": / error" ));

}

рдФрд░ рдЕрдЧрд░ (text.contains (FixmeExp))

{

newItem-> setBackgroundColor (QColor ( "# FFFDFDF" ));

рдкрд╛рда = text.replace (FixmeExp, " FIXME:;);

newItem-> setIcon (QIcon ( ": / error" ));

}

рдФрд░ рдЕрдЧрд░ (text.contains (hackExp))

{

newItem-> setBackgroundColor (QColor ( "# FFFFAA" ));

рдкрд╛рда = text.replace (hackExp, "рд╣реИрдХ: place);

newItem-> setIcon (QIcon ( ": / info" ));

}



newItem-> setText (text.trimmed () + "(" + tr ( "рд▓рд╛рдЗрдитАЮ ) + QString :: рд╕рдВрдЦреНрдпрд╛ (rowNumber) + ")" ); // рд░рд┐рдХреЙрд░реНрдб рдкрд╛рда рд╕реЗрдЯ рдХрд░реЗрдВ

newItem-> setToolTip (рдлрд╝рд╛рдЗрд▓ + ":" + QString :: рд╕рдВрдЦреНрдпрд╛ (rowNumber)); // рдЯреВрд▓рдЯрд┐рдк рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛, рдпрд╣ рд╕рд┐рд░реНрдл рдЙрд╕реА рддрд░рд╣ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдиреАрдЪреЗ рдмрддрд╛рдКрдВрдЧрд╛ред

todoList-> addItem (newItem); // рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝реЗрдВ

}



* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред




рд░рд┐рдХреЙрд░реНрдб рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рд▓рд╛рдЗрди рдкрд░ рдЬрд╛рдПрдВ



рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реИ рдЬреЛ рд╡рд╛рдВрдЫрд┐рдд рд░реЗрдЦрд╛ рдкрд░ рд╕рдВрдХреНрд░рдордг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдФрд░ рд╕реНрд▓реЙрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕реЗ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рдЪрдпрди рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

рд╢реВрдиреНрдп рдЯреЛрдбрдкреНрд▓рдЧрд┐рди :: gotoToRowInFile (QListWidgetItem * рдЖрдЗрдЯрдо)

{

int рдкрдВрдХреНрддрд┐ = 0; // рд▓рд╛рдЗрди рдирдВрдмрд░

QString рдлрд╝рд╛рдЗрд▓ = "" ; // рдлрд╝рд╛рдЗрд▓ рдирд╛рдо



/ * рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ * /

QStringList tmpList = рдЖрдЗрдЯрдо-> рдЯреВрд▓рдЯрд┐рдк ()ред рд╕реНрдкреНрд▓рд┐рдЯ ( ":" );

рдЕрдЧрд░ (tmpList.size () == 2)

{

рдлрд╝рд╛рдЗрд▓ = tmpList.at (0);

рдмреВрд▓ рдареАрдХ;

row = tmpList.at (1) .toInt (& ok);

рдЕрдЧрд░ (рдареАрдХ рд╣реИ)

{

рдкрдВрдХреНрддрд┐ = 0;

}

}

рдЕрдЧрд░ (QFileInfo (рдлрд╝рд╛рдЗрд▓) .exists ()) // рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рд╣реИред

{

TextEditor :: BaseTextEditor :: openEditorAt (рдлрд╝рд╛рдЗрд▓, рдкрдВрдХреНрддрд┐); // рдкрдВрдХреНрддрд┐ рд╕рдВрдЦреНрдпрд╛ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрд░реНрд╕рд░ рд░рдЦрдХрд░ рдЬрдмрд░рди рдлрд╝рд╛рдЗрд▓ рджрд┐рдЦрд╛рдПрдВред рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ TextEditor рдкреНрд▓рдЧрдЗрди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рдЙрдЪрд┐рдд рд╣реЗрдбрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдХреЛрд░ :: EditorManager :: рдЙрджрд╛рд╣рд░рдг () -> рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЯрд╛рдЗрдЬрд╝рд░рдореИрдиреЗрдЬрд░рд╡рд┐рдЬрд╝рди ();

}

}



* рдЗрд╕ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рд╕реЛрд░реНрд╕ рдХреЛрдб рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред




рдирд┐рд╖реНрдХрд░реНрд╖



рдЦреИрд░, рдпрд╣ рд╕рдм, рдкреНрд▓рдЧрдЗрди рддреИрдпрд╛рд░ рд╣реИ, рдЗрд╕реЗ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЖрдк рдпрд╣рд╛рдБ рд╕реЗ рдкреНрд▓рдЧрдЗрди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред



All Articles