Kexi/Porting to Qt&KDE 4: Difference between revisions
Appearance
< Kexi
Line 140: | Line 140: | ||
# [done by jstaniek][kossebau] <strike>If window gets focus back, view jumps to ensure focus cell is visible, not always wanted (-> Qt::FocusReason)</strike> | # [done by jstaniek][kossebau] <strike>If window gets focus back, view jumps to ensure focus cell is visible, not always wanted (-> Qt::FocusReason)</strike> | ||
# [kossebau] the height of the vertical header is not updated when records are added or removed, resulting in being painted only for the first number of records matching the number of records on initial creation of the table | # [kossebau] the height of the vertical header is not updated when records are added or removed, resulting in being painted only for the first number of records matching the number of records on initial creation of the table | ||
# [kossebau] | # [done by jstaniek][kossebau] <strike>When escaping editing a record (e.g. by pressing ESC 2x), the "editing" indicator on the record header is only updated once the mouse cursor gets moved across headers or the current record.</strike> | ||
Minor defects: | Minor defects: |
Revision as of 00:15, 11 January 2015
Original document on kexi-project.org. We'll want to integrate the notes in a single page one day...
Forms
Forms Porting
Status: mostly DONE, some QPalette porting remains
- WidgetList -> QWidgetList, WidgetListIterator -> QWidgetList::Iterator/QWidgetList::ConstIterator/QMutableListIterator<QWidget*>
- standard widgets: List View -> List Widget (and QListView -> QListWidget)
- WidgetInfo::Dict -> WidgetInfo::Hash
- K3ListBox support removed: rarely used before
- K3ListView support removed, TODO: use QTreeWidget or QTreeView
- Container factory:
- stacked widget's property "id" replaced with "stackIndex" property (int).
- tab widget: currentPage property (QWidget*) -> currentIndex (int)
Forms Refactoring
1st Phase
Started by Jstaniek on 3 Jan 2009, finished on 18 Feb 2009
Status: formeditor/ & plugins/forms/ done
Reasons for refactoring:
- The process of instantiating a form (the Form class) is very complicated now what makes it very hard to properly implement subforms
- The code full of interdependencies and thus is fragile when adding new functionality or fixing bugs
- The FormManager class centralizes a number of operations that shall belong to Form itself
- The naming of methods and classes can be improved, e.g. Form -> FormController
- The ObjectTree* classes introduce redundancy as we already have QWidget hierarchy, and extensible property system; this complicates the code
Details:
- Form and FormManager:
- FormManager removed. Most facilities of FormManager merged into Form. Thus we are no longer track 'active form' on switching between forms; instead each Form object keeps necessary information.
- void FormManager::insertWidget(const QByteArray &classname) moved
- void FormManager::stopInsert() moved as abortWidgetInserting()
- void FormManager::enterConnectingState() moved as enterConnectingState()
- void FormManager::stopCreatingConnection() moved as abortCreatingConnection()
- void FormManager::slotPointerClicked() moved as enterWidgetSelectingState()
- Form::State enum defined instead of multiple boolean attributes of FormManager
- FormManager::isInserting() and FormManager::isCreatingConnection() removed, Form::state() is used instead
- Design or View mode is expressed using Mode enum value, not boolean flag
- Form::setSelectedWidget(QWidget *w, bool add, bool dontRaise, bool moreWillBeSelected) replaced with Form::selectWidget(QWidget *w, Form::WidgetSelectionFlags)
- Form::deSelectWidget(QWidget*) replaced with Form::deselectWidget(QWidget*)
- bool FormManager::isTopLevel(QWidget*) moved to Form::isTopLevelWidget(QWidget*)
- FormManager::selectedClass() removed
- WidgetLibrary* FormManager::createWidgetLibrary(FormManager* m, const QStringList& supportedFactoryGroups) removed, WidgetLibrary is instantiated directly by KexiFormPart
- FormManager::dirty(KFormDesigner::Form *form, bool isDirty = true) signal moved to Form::modified() signal
- FormManager::showFormUICode() moved to KexiFormManager
- FormManager::m_emitSelectionSignalsUpdatesPropertySet removed since we're not using windowChanged() (??)
- void FormManager::setObjectTreeView(ObjectTreeView *treeview) moved to KexiFormManager::init()
- WidgetPropertySet
- removed, its code moved to Form
- emitWidgetPropertyChanged() removed
- Added #ifdef KFD_SIGSLOTS to disable code related to visual handling signal/slots connection
- FormWidget
- code moved to FormWidget.h and FormWidget.cpp
- clearForm() removed (let's hopw QWidget update() is enough)
- Commands:
- Paste/Cut/Copy commands use QApplication::clipboard() now instead of FormManager::self()->m_domDoc, which has been removed
- PropertyCommand::property() renamed to PropertyCommand::propertyName()
- added operator<< for kDebug()
- Container:
- void setSelectedWidget(QWidget *selected, bool add, bool dontRaise = false, bool moreWillBeSelected = false) -> selectWidget(QWidget *w, Form::WidgetSelectionFlags flags = Form::DefaultWidgetSelectionFlags)
- LayoutType enum moved to Form
- setLayout() -> setLayoutType()
- KexiFormPart
- slotPropertyChanged() moved to Form::handleWidgetPropertyChanged(), so Form::widgetPropertyChanged() signal can be now removed
- slotAutoTabStopsSet()'s code moved to Form::editTabOrder() itself
- KexiFormPart::static_formsLibrary moved to KexiFormManger
- slotWidgetCreatedByFormsLibrary(QWidget*) moved to KexiFormManger
- WidgetLibrary* KexiFormPart::library() moved to KexiFormManager
- assignAction() moved to KexiFormManager
- KexiFormManger
- added static self()
- is initialized by KexiFormPart
2nd Phase
Jstaniek, 2009-04-25..2009-05-10
Status: DONE
- WidgetFactory refactored
- the main change is that we do not keep pointer to a currently handled container/widget/inline-editor in per-factory manner, this is kept per-form, so WidgetFactory::editor(), setEditor(), widget(), setWidget() have been removed
- added:
- InlineEditorCreationArgument class - arguments used by Form::createInlineEditor() and WidgetFactory::startInlineEditing()
- renamed:
- virtual bool startEditing(const QByteArray &classname, QWidget *w, Container *container) = 0 to virtual bool startInlineEditing(InlineEditorCreationArguments& args) = 0
- resizeEditor() made public
- virtual bool changeText(const QString &newText) renamed to virtual bool changeInlineText(Form *form, QWidget *widget, const QString& text);
- void changeProperty(const char *name, const QVariant &value, Form *form) renamed to void changeProperty(Form *form, QWidget *widget, const char *name, const QVariant &value);
- moved:
- void createEditor(const QByteArray &classname, const QString &text, QWidget *w, Container *container, QRect geometry, Qt::Alignment alignment, bool useFrame = false, bool multiLine = false, Qt::BackgroundMode background = Qt::NoBackground) moved to void Form::createInlineEditor(const KFormDesigner::WidgetFactory::InlineEditorCreationArguments& args);
- contents of disableFilter() moved to Form
- eventFilter() moved to Form::eventFilter()
- resetEditor() moved to Form::resetInlineEditor()
- disableFilter() moved to Form::disableFilter()
- changeInlineTextInternal() moved to Form::changeInlineTextInternal()
- now uses InlineTextEditingCommand
- inlineEditorDeleted() moved to
- slotTextChanged() moved to Form::slotInlineTextChanged()
- editorDeleted() moved to Form::editorDeleted()
- widgetDestroyed() moved to Form::widgetDestroyed()
- editorText() moved to Form::inlineEditorText()
- setEditorText() moved to Form::setInlineEditorText()
- m_editedWidgetClass moved to Form::Private::editedWidgetClass
- m_firstText moved to Form::Private::originalInlineText
- m_editor moved to Form::Private::inlineEditor
- m_container moved to Form::Private::inlineEditorContainer;
- removed:
- void setEditor(QWidget *widget, QWidget *editor);
- QWidget *editor(QWidget *widget) const;
- void setWidget(QWidget *widget, Container *container);
- QWidget *widget() const;
- QPointer<ResizeHandleSet> m_handles;
- QPointer<QWidget> m_widget;
- ContainerFactory:
- addTabPage() moved to internal AddTabAction, so context (container, widget) is no longer kept globally
- similarly, renameTabPage() moved to internal RenameTabAction
- similarly, removeTabPage() moved to internal RemoveTabAction
- similarly, addStackPage() moved to internal AddStackPageAction
- similarly, removeStackPage() moved to internal RemoveStackPageAction
- similarly, nextStackPage() and prevStackPage() moved to internal GoToStackPageAction
- ResizeHandleSet:
- added Form* form() const
- Commands:
- use InlineTextEditingCommand in Form::changeInlineTextInternal() to get undo/redo functionality for inline editing
- KexiDBFactory updated for the new API
- ported code from void FormManager::initForm(Form *form) to KexiFormView::initForm()
3rd Phase
Jstaniek, 2010-09-01..
- ObjectTreeView/ObjectTreeViewItem renamed to WidgetTreeWidget/WidgetTreeWidgetItem and ported to QTreeWidget/QTreeWidgetItem
Table View
Major defects:
- [done by jstaniek][kossebau]
Record navigator does not update on selecting another record (by mouse click or keyboard navigation).- Works after switching to other tab and switching back --Jstaniek (talk) 19:34, 1 January 2015 (UTC).
- Also works when the navigator is put aside of a visible scrollbar --Jstaniek (talk) 20:30, 1 January 2015 (UTC)
Update: it's related to putting the navigator aside of the scrollbar. I've found another solution that uses QAbstractScrollArea::addScrollBarWidget(), and it's almost done. --Jstaniek (talk) 23:49, 1 January 2015 (UTC)
- [done by jstaniek][kossebau]
If window gets focus back, view jumps to ensure focus cell is visible, not always wanted (-> Qt::FocusReason) - [kossebau] the height of the vertical header is not updated when records are added or removed, resulting in being painted only for the first number of records matching the number of records on initial creation of the table
- [done by jstaniek][kossebau]
When escaping editing a record (e.g. by pressing ESC 2x), the "editing" indicator on the record header is only updated once the mouse cursor gets moved across headers or the current record.
Minor defects:
- [rshtemberko] Lines that separates column's names aren't in the same position as lines separating columns themselves [1]
- [done by jstaniek] [kossebau]
if vertical scrollbar is shown and thus navigator aside of it, the background color of the navigator does not match (oxygen at least) - [kossebau] Horizontal header is painted outside of viewport over the vertial scrollbar if view width is smaller than viewport width
- [kossebau] Grey bar is painted at bottom of viewport if view width is smaller than viewport width
- [kossebau] there seems some unused calculated space at the bottom of the content, so there is always white space after the last (auto) record (oxygen at least)
Wishes:
- [kossebau] tooltip on vertical scrolling is cool, but could mention complete visible range of records, not just first record
Additional notes
- Reimplement QWidget::showEvent(QEvent*) [virtual protected] instead of QWidget::show() [virtual public]. Also add if (!event->spontanous()) condition, as we're most often not interested in handling spontaneous events. Do the same for QWidget::hide()/QWidget::hideEvent(QEvent*).
- Note: TODO in Kexi!
- Use QRubberBand instead of painting using XOR
- already used in KexiTableView and the query designer for drag indicators
- TODO: use it in forms for displaying rectangles when inserting or resizing widgets
See also http://trolltech.com/developer/faqs/517/
Q3 Usage
Location | Class | Notes |
---|---|---|
formeditor/kexiactionselectiondialog.cpp | #include <Q3Header> | |
formeditor/factories/containerfactory.cpp | #include <Q3ScrollView> | Needs to be rewritten |
formeditor/editlistviewdialog.cpp | #include <q3header.h> | File not compiled, to rewrite |
formeditor/editlistviewdialog.cpp | #include <Q3VBoxLayout> | File not compiled, to rewrite |
formeditor/editlistviewdialog.cpp | #include <Q3HBoxLayout> | File not compiled, to rewrite |
kexiutils/debuggui.cpp | #include <q3header.h> | Needs to be rewritten |
main/printing/ | ||
main/startup/KexiStartupDialogTemplatesPage.cpp | #include <Q3Header> | |
main/startup/KexiStartupFileDialogBase_win.h | #include <q3filedialog.h> | |
plugins/forms/kexidbfactory.cpp | //#include <q3scrollview.h> | |
plugins/forms/kexidbfactorybase.cpp | #include <q3scrollview.h> | Needs to be rewritten |
plugins/forms/widgets/kexidbdatetimeedit.h | #include <q3datetimeedit.h> | File not compiled, to rewrite |
plugins/forms/widgets/kexidbtimeedit.h | #include <q3datetimeedit.h> | File not compiled, to rewrite |
plugins/forms/widgets/kexidbsubform.cpp | #include <Q3Frame> | File not compiled, to rewrite |
plugins/forms/widgets/kexidbsubform.h | #include <q3scrollview.h> | File not compiled, to rewrite |
plugins/forms/widgets/kexidbdateedit.h | #include <q3datetimeedit.h> | File not compiled, to rewrite |
plugins/importexport/csv/kexicsvimportdialog.cpp | #include <q3table.h> | |
plugins/scripting/kexiscripting/kexiscriptdesignview.cpp | #include <q3stylesheet.h> | Needs to be rewritten |
plugins/queries/kexiquerydesignersqlhistory.h | #include <q3scrollview.h> | Needs to be rewritten |
plugins/queries/kexiquerydesignersql.cpp | //Qt4#include <Q3SimpleRichText> | |
tests/widgets/kexidbdrivercombotest.cpp | #include <Q3VBoxLayout> | Needs to be rewritten |
widget/pixmapcollection.h | #include <q3intdict.h> | File not compiled, to rewrite |
widget/relations/KexiRelationsTableContainer_p.cpp | #include <q3header.h> | Needs to be rewritten (maybe in QGV?) |
widget/relations/KexiRelationsScrollArea.cpp | #include <q3header.h> | Needs to be rewritten |
widget/kexiscrollview.h | #include <Q3ScrollView> | Needs to be rewritten |
widget/utils/kexirecordnavigator.cpp | #include <Q3ScrollView> | Needs to be rewritten |
widget/utils/kexigradientwidget.h | #include <Q3PtrList> | |
widget/tableview/kexitimetableedit.cpp | #include <q3datetimeedit.h> | |
widget/tableview/kexitableedit.h | #include <q3scrollview.h> | Needs to be rewritten |
widget/tableview/kexitableview.cpp | #include <Q3WhatsThis> | Needs to be rewritten |
widget/tableview/kexitableviewheader.h | #include <Q3Header> | Needs to be rewritten |
widget/tableview/kexitableview.h | #include <Q3ScrollView> | Needs to be rewritten |
widget/tableview/kexitableview.h | #include <q3header.h> | Needs to be rewritten |
widget/navigator/KexiProjectListView.cpp | #include <q3header.h> | |
widget/kexiscrollview.cpp | #include <Q3Frame> |
K3 Usage
Location | Class | Notes |
---|---|---|
formeditor/kexiactionselectiondialog_p.h | #include <k3listview.h> | |
formeditor/formIO.cpp | #include <k3command.h> | Needs to be rewritten |
formeditor/editlistviewdialog.cpp | #include <k3listview.h> | File not compiled, to rewrite |
formeditor/editlistviewdialog.cpp | #include <k3listbox.h> | File not compiled, to rewrite |
kexiutils/debuggui.cpp | #include <k3listview.h> | Needs to be rewritten |
main/startup/KexiStartupDialogTemplatesPage.h | #include <k3listview.h> | Remove |
plugins/tables/kexitabledesignerview_p.h | #include <K3Command> | |
plugins/tables/kexitabledesignercommands.h | #include <k3command.h> | |
plugins/tables/kexitabledesignerview.cpp | #include <k3command.h> | |
plugins/importexport/csv/kexicsvexportwizard.h | #include <k3wizard.h> | Needs to be rewritten (using the new Assistant GUI) |
widget/pixmapcollection.h | #include <k3iconview.h> | File not compiled, to rewrite |
widget/relations/KexiRelationsTableContainer_p.h | #include <k3listview.h> | Needs to be rewritten |
widget/relations/KexiRelationsTableContainer.h | #include <k3listview.h> | Needs to be rewritten |
widget/utils/klistviewitemtemplate.h | #include <k3listview.h> | |
widget/navigator/KexiProjectListView.h | #include <k3listview.h> | |
widget/navigator/KexiProjectListView_p.h | #include <K3ListView> | |
widget/navigator/KexiProjectListView.cpp | #include <k3listview.h> | |
widget/navigator/KexiProjectListViewItem.h | #include <k3listview.h> |
Qt3Support State (01-Sep-2012)
piggz@linux-4qkh:~/src/calligra/kexi> grep -R 'QT3\|q3\|k3' *
- CMakeLists.txt: add_definitions(-DQT3_SUPPORT -DQT3_SUPPORT_WARNINGS)
- CMakeLists.txt: ${KDE4_KFILE_LIBS} ${QT_QT3SUPPORT_LIBRARY}
- formeditor/formIO.cpp:#include <k3command.h>
- formeditor/factories/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- formeditor/factories/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- formeditor/editlistviewdialog.cpp:#include <q3header.h>
- formeditor/editlistviewdialog.cpp:#include <k3listview.h>
- formeditor/editlistviewdialog.cpp:#include <k3listbox.h>
- kexiutils/debuggui.cpp:#include <q3header.h>
- kexiutils/debuggui.cpp:#include <k3listview.h>
- main/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- main/startup/KexiStartupDialogTemplatesPage.h:#include <k3listview.h>
- main/startup/KexiMainImportExportPage.ui: <include location="local">k3listview.h</include>
- main/startup/KexiProjectStorageTypeSelectionPage.ui: <include location="local">k3listview.h</include>
- plugins/forms/kexidbfactorybase.cpp:#include <q3scrollview.h>
- plugins/forms/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- plugins/forms/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- plugins/forms/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- plugins/forms/widgets/kexidbdatetimeedit.h:#include <q3datetimeedit.h>
- plugins/forms/widgets/kexidbtimeedit.h:#include <q3datetimeedit.h>
- plugins/forms/widgets/kexidbsubform.h:#include <q3scrollview.h>
- plugins/forms/widgets/kexidbdateedit.h:#include <q3datetimeedit.h>
- plugins/relations/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- plugins/shapes/relationdesign/CMakeLists.txt:${QT_QT3SUPPORT_LIBRARY}
- plugins/importexport/csv/kexicsvexportwizard.h:#include <k3wizard.h>
- plugins/importexport/csv/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- plugins/scripting/kexiscripting/kexiscriptdesignview.cpp:#include <q3stylesheet.h>
- plugins/queries/kexiquerydesignersqlhistory.h:#include <q3scrollview.h>
- plugins/queries/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- widget/pixmapcollection.h:#include <q3intdict.h>
- widget/pixmapcollection.h:#include <k3iconview.h>
- widget/relations/KexiRelationsTableContainer_p.cpp:#include <q3header.h>
- widget/relations/KexiRelationsTableContainer_p.h:#include <k3listview.h>
- widget/relations/KexiRelationsTableContainer.h:#include <k3listview.h>
- widget/relations/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- widget/relations/KexiRelationsScrollArea.cpp:#include <q3header.h>
- widget/dataviewcommon/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- widget/utils/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- widget/tableview/kexitableedit.h:#include <q3scrollview.h>
- widget/tableview/kexitableview.h:#include <q3header.h>
- widget/tableview/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}
- widget/CMakeLists.txt: ${QT_QT3SUPPORT_LIBRARY}