Mercurial > hg > forks > UniversalIndentGUI
changeset 497:97e85897faec
- When the whole text is indented the vertical scroll position won't change to the file beginning anymore.
- The menu for showing/hiding the parameter window now correctly shows the window state.
git-svn-id: svn://svn.code.sf.net/p/universalindent/code/trunk@737 59b1889a-e5ac-428c-b0c7-476e01d41282
author | thomas_-_s <thomas_-_s@59b1889a-e5ac-428c-b0c7-476e01d41282> |
---|---|
date | Thu, 19 Jun 2008 18:00:45 +0000 |
parents | 205b2f8adf4a |
children | 14ee8d1953a4 |
files | src/UniversalIndentGUI_NPP/UniversalIndentGUI_NPP.cpp src/UniversalIndentGUI_NPP/UniversalIndentGUI_NPP.h src/indenthandler.cpp src/indenthandler.h |
diffstat | 4 files changed, 102 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- a/src/UniversalIndentGUI_NPP/UniversalIndentGUI_NPP.cpp Tue Jun 17 13:07:24 2008 +0000 +++ b/src/UniversalIndentGUI_NPP/UniversalIndentGUI_NPP.cpp Thu Jun 19 18:00:45 2008 +0000 @@ -28,7 +28,7 @@ /* information for notepad */ CONST INT nbFunc = 3; -CONST CHAR PLUGIN_NAME[] = "&UniversalIndentGUI_NPP"; +CONST CHAR PLUGIN_NAME[] = "&UniversalIndentGUI"; /* global values */ HANDLE g_hModule = NULL; @@ -57,9 +57,6 @@ { case DLL_PROCESS_ATTACH: { - //IndentHandler *indentHandler = new IndentHandler("E:/EigeneDateien/Dokumente/Informatik/UniversalIndentGUI/indenters", "E:/EigeneDateien/Dokumente/Informatik/UniversalIndentGUI/config", "E:/EigeneDateien/Dokumente/Informatik/UniversalIndentGUI/temp", 0); - //indentHandler->show(); - //app.exec(); if (!qApp) { int argc = 1; char *argv[] = {"setup", NULL}; @@ -68,33 +65,33 @@ indentHandler->setWindowModality( Qt::ApplicationModal ); indentHandler->setWindowTitle("UniversalIndentGUI"); indentHandler->setWindowIcon(QIcon(QString::fromUtf8(":/mainWindow/icon2.png"))); - indentHandler->setParameterChangedCallback( indentText ); - //qapp.setActiveWindow(indentHandler); + indentHandler->setParameterChangedCallback( NULL ); + indentHandler->setWindowClosedCallback( showUiGUI ); } /* Set function pointers */ - funcItem[0]._pFunc = toggleView; - funcItem[1]._pFunc = aboutDlg; - funcItem[2]._pFunc = indentText; + funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pFunc = showUiGUI; + funcItem[EXECUTE_TEXT_INDENT_INDEX]._pFunc = indentText; + funcItem[TOGGLE_AUTO_UPDATE_INDEX]._pFunc = toggleAutoUpdate; /* Fill menu names */ - strcpy(funcItem[0]._itemName, "&Show Dockable View"); - strcpy(funcItem[1]._itemName, "&About..."); - strcpy(funcItem[2]._itemName, "&Indent text"); + strcpy(funcItem[TOGGLE_SHOW_UIGUI_INDEX]._itemName, "&Show Parameter Settings"); + strcpy(funcItem[EXECUTE_TEXT_INDENT_INDEX]._itemName, "&Indent text"); + strcpy(funcItem[TOGGLE_AUTO_UPDATE_INDEX]._itemName, "&Enable Text Auto Update"); /* Set shortcuts */ - funcItem[0]._pShKey = new ShortcutKey; - funcItem[0]._pShKey->_isAlt = true; - funcItem[0]._pShKey->_isCtrl = true; - funcItem[0]._pShKey->_isShift = true; - funcItem[0]._pShKey->_key = 'T'; - funcItem[1]._pShKey = NULL; - funcItem[2]._pShKey = NULL; + funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pShKey = new ShortcutKey; + funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pShKey->_isAlt = true; + funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pShKey->_isCtrl = true; + funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pShKey->_isShift = true; + funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pShKey->_key = 'T'; + funcItem[EXECUTE_TEXT_INDENT_INDEX]._pShKey = NULL; + funcItem[TOGGLE_AUTO_UPDATE_INDEX]._pShKey = NULL; break; } case DLL_PROCESS_DETACH: { - delete funcItem[0]._pShKey; + delete funcItem[TOGGLE_SHOW_UIGUI_INDEX]._pShKey; delete indentHandler; /* save settings */ @@ -152,7 +149,7 @@ if (notifyCode->nmhdr.code == NPPN_TBMODIFICATION) { g_TBWndMgr.hToolbarBmp = (HBITMAP)::LoadImage((HINSTANCE)g_hModule, MAKEINTRESOURCE(IDB_TOOLBAR), IMAGE_BITMAP, 0, 0, (LR_LOADMAP3DCOLORS)); - ::SendMessage(nppData._nppHandle, NPPM_ADDTOOLBARICON, (WPARAM)funcItem[TOGGLE_DOCKABLE_WINDOW_INDEX]._cmdID, (LPARAM)&g_TBWndMgr); + ::SendMessage(nppData._nppHandle, NPPM_ADDTOOLBARICON, (WPARAM)funcItem[TOGGLE_AUTO_UPDATE_INDEX]._cmdID, (LPARAM)&g_TBWndMgr); } } } @@ -213,27 +210,43 @@ /************************************************************************** * Interface functions */ -void toggleView(void) +void toggleAutoUpdate(void) { - /* get menu and test if dockable dialog is open */ - HMENU hMenu = ::GetMenu(nppData._nppHandle); - UINT state = ::GetMenuState(hMenu, funcItem[TOGGLE_DOCKABLE_WINDOW_INDEX]._cmdID, MF_BYCOMMAND); - universalIndentGUI_NPPDialog.doDialog(state & MF_CHECKED ? false : true); + HMENU hMenu = ::GetMenu(nppData._nppHandle); + UINT state = ::GetMenuState(hMenu, funcItem[TOGGLE_AUTO_UPDATE_INDEX]._cmdID, MF_BYCOMMAND); + + if ( state & MF_CHECKED ) { + indentHandler->setParameterChangedCallback( NULL ); + state = ::CheckMenuItem(hMenu, funcItem[TOGGLE_AUTO_UPDATE_INDEX]._cmdID, MF_BYCOMMAND | MF_UNCHECKED); + } + else { + showUiGUI(); + indentHandler->setParameterChangedCallback( indentText ); + state = ::CheckMenuItem(hMenu, funcItem[TOGGLE_AUTO_UPDATE_INDEX]._cmdID, MF_BYCOMMAND | MF_CHECKED); + } + + indentText(); } -void aboutDlg(void) +void showUiGUI(void) { HMENU hMenu = ::GetMenu(nppData._nppHandle); - UINT state = ::GetMenuState(hMenu, funcItem[1]._cmdID, MF_BYCOMMAND); + UINT menuState = ::GetMenuState(hMenu, funcItem[TOGGLE_SHOW_UIGUI_INDEX]._cmdID, MF_BYCOMMAND); + bool windowIsVisible = indentHandler->isVisible(); - if ( state & MF_CHECKED ) { - indentHandler->hide(); - state = ::CheckMenuItem(hMenu, funcItem[1]._cmdID, MF_BYCOMMAND | MF_UNCHECKED); + if ( menuState & MF_CHECKED ) { + + if ( windowIsVisible ) { + indentHandler->hide(); + } + menuState = ::CheckMenuItem(hMenu, funcItem[TOGGLE_SHOW_UIGUI_INDEX]._cmdID, MF_BYCOMMAND | MF_UNCHECKED); } else { - indentHandler->show(); - state = ::CheckMenuItem(hMenu, funcItem[1]._cmdID, MF_BYCOMMAND | MF_CHECKED); + if ( !windowIsVisible ) { + indentHandler->show(); + } + menuState = ::CheckMenuItem(hMenu, funcItem[TOGGLE_SHOW_UIGUI_INDEX]._cmdID, MF_BYCOMMAND | MF_CHECKED); } } @@ -265,15 +278,22 @@ fullEditorText = new char[textLength]; - // Get whole text + // Get whole text. ::SendMessage(getCurrentHScintilla(currentEdit), SCI_GETTEXT, textLength, (LPARAM)fullEditorText); + // Get the first visible line and add the max visible lines to it so later scrolling to the correct position is ensured. + int firstLine = ::SendMessage(getCurrentHScintilla(currentEdit), SCI_GETFIRSTVISIBLELINE, 0, 0); + firstLine += ::SendMessage(getCurrentHScintilla(currentEdit), SCI_LINESONSCREEN, 0, 0) - 1; + QString indentedText = indentHandler->callIndenter(fullEditorText, "cpp"); QByteArray indentedTextByteArray = indentedText.toAscii(); - // Set whole text + // Set whole text. ::SendMessage(getCurrentHScintilla(currentEdit), SCI_SETTEXT, 0, (LPARAM)indentedTextByteArray.constData()); + + // Set first visible line again. + ::SendMessage(getCurrentHScintilla(currentEdit), SCI_GOTOLINE, firstLine, 0); } // Format only the selected text. else {
--- a/src/UniversalIndentGUI_NPP/UniversalIndentGUI_NPP.h Tue Jun 17 13:07:24 2008 +0000 +++ b/src/UniversalIndentGUI_NPP/UniversalIndentGUI_NPP.h Thu Jun 19 18:00:45 2008 +0000 @@ -31,7 +31,9 @@ #include "SettingsPaths.h" /* menu position in funcItem */ -#define TOGGLE_DOCKABLE_WINDOW_INDEX 0 +#define TOGGLE_SHOW_UIGUI_INDEX 0 +#define EXECUTE_TEXT_INDENT_INDEX 1 +#define TOGGLE_AUTO_UPDATE_INDEX 2 /* ini file name */ @@ -57,8 +59,8 @@ void saveSettings(void); /* menu functions */ -void toggleView(void); -void aboutDlg(void); +void showUiGUI(void); +void toggleAutoUpdate(void); void indentText(void);
--- a/src/indenthandler.cpp Tue Jun 17 13:07:24 2008 +0000 +++ b/src/indenthandler.cpp Thu Jun 19 18:00:45 2008 +0000 @@ -47,12 +47,7 @@ setObjectName(QString::fromUtf8("indentHandler")); - if ( mainWindow == NULL ) { - this->mainWindow = this; - } - else { - this->mainWindow = mainWindow; - } + this->mainWindow = mainWindow; parameterChangedCallback = NULL; indenterSettings = NULL; @@ -116,7 +111,12 @@ settingsDirctoryStr = SettingsPaths::getSettingsPath(); QDir indenterDirctory = QDir(indenterDirctoryStr); - errorMessageDialog = new UiGuiErrorMessage(mainWindow); + if ( mainWindow != NULL ) { + errorMessageDialog = new UiGuiErrorMessage(mainWindow); + } + else { + errorMessageDialog = new UiGuiErrorMessage(this); + } indenterIniFileList = indenterDirctory.entryList( QStringList("uigui_*.ini") ); if ( indenterIniFileList.count() > 0 ) { @@ -866,7 +866,9 @@ spinBox->setToolTip( paramToolTip ); spinBox->setMaximumWidth(50); spinBox->setMinimumWidth(50); - spinBox->installEventFilter( mainWindow ); + if ( mainWindow != NULL ) { + spinBox->installEventFilter( mainWindow ); + } if ( indenterSettings->value(indenterParameter + "/MinVal").toString() != "" ) { spinBox->setMinimum( indenterSettings->value(indenterParameter + "/MinVal").toInt() ); } @@ -885,7 +887,9 @@ label->setText(indenterParameter); label->setBuddy(spinBox); label->setToolTip( paramToolTip ); - label->installEventFilter( mainWindow ); + if ( mainWindow != NULL ) { + label->installEventFilter( mainWindow ); + } // put all into a layout and add it to the toolbox page QHBoxLayout *hboxLayout = new QHBoxLayout(); @@ -913,7 +917,9 @@ chkBox->setText(indenterParameter); paramToolTip = indenterSettings->value(indenterParameter + "/Description").toString(); chkBox->setToolTip( paramToolTip ); - chkBox->installEventFilter( mainWindow ); + if ( mainWindow != NULL ) { + chkBox->installEventFilter( mainWindow ); + } toolBoxPages.at(category).vboxLayout->addWidget(chkBox); // remember parameter name and reference to its checkbox @@ -947,7 +953,9 @@ lineEdit->setToolTip( paramToolTip ); lineEdit->setMaximumWidth(50); lineEdit->setMinimumWidth(50); - lineEdit->installEventFilter( mainWindow ); + if ( mainWindow != NULL ) { + lineEdit->installEventFilter( mainWindow ); + } // create the label QLabel *label = new QLabel( toolBoxPages.at(category).page ); @@ -955,7 +963,9 @@ label->setBuddy(lineEdit); label->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); label->setToolTip( paramToolTip ); - label->installEventFilter( mainWindow ); + if ( mainWindow != NULL ) { + label->installEventFilter( mainWindow ); + } // put all into a layout and add it to the toolbox page QHBoxLayout *hboxLayout = new QHBoxLayout(); @@ -1002,7 +1012,9 @@ } paramToolTip = indenterSettings->value(indenterParameter + "/Description").toString(); comboBox->setToolTip( paramToolTip ); - comboBox->installEventFilter( mainWindow ); + if ( mainWindow != NULL ) { + comboBox->installEventFilter( mainWindow ); + } // put all into a layout and add it to the toolbox page QHBoxLayout *hboxLayout = new QHBoxLayout(); @@ -1477,3 +1489,16 @@ parameterChangedCallback(); } } + + +void IndentHandler::setWindowClosedCallback( void(*winClosedCallback)(void) ) { + windowClosedCallback = winClosedCallback; +} + + +void IndentHandler::closeEvent(QCloseEvent *event) { + if ( windowClosedCallback != NULL ) { + windowClosedCallback(); + } + event->accept(); +} \ No newline at end of file
--- a/src/indenthandler.h Tue Jun 17 13:07:24 2008 +0000 +++ b/src/indenthandler.h Thu Jun 19 18:00:45 2008 +0000 @@ -58,7 +58,7 @@ Q_OBJECT public: - IndentHandler(int indenterID, QWidget *mainWindow = 0, QWidget *parent = 0); + IndentHandler(int indenterID, QWidget *mainWindow = NULL, QWidget *parent = NULL); ~IndentHandler(); QString generateCommandlineCall(QString inputFileExtension); @@ -75,12 +75,14 @@ QList<QAction*> getIndenterMenuActions(); void contextMenuEvent( QContextMenuEvent *event ); void setParameterChangedCallback( void(*paramChangedCallback)(void) ); + void setWindowClosedCallback( void(*winClosedCallback)(void) ); signals: void indenterSettingsChanged(); protected: bool event( QEvent *event ); + void closeEvent(QCloseEvent *event); private slots: void setIndenter(int indenterID); @@ -181,6 +183,7 @@ QAction *actionCreateShellScript; QAction *actionResetIndenterParameters; void(*parameterChangedCallback)(void); + void(*windowClosedCallback)(void); }; #endif // INDENTHANDLER_H