Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rename FxLine directly in a QLineEdit #2918

Merged
merged 6 commits into from
Aug 7, 2016
Merged

Conversation

BaraMGB
Copy link
Contributor

@BaraMGB BaraMGB commented Jul 15, 2016

Same as #2916. For avoiding dialog window we can use a QLineEdit for renaming the FxLine. I used a QGraphicsView for rotating the QLineEdit.

renamefxline

@Umcaruje
Copy link
Member

The beginning of the qlinedit is higher than the text's original position, which seems inconsistent to me. Other than that, looks good and avoids dialogs, so I'm all for that.

@tresf
Copy link
Member

tresf commented Jul 17, 2016

Can someone explain the purpose of using two components over one in this instance? For example, can't we simply keep the input a QLineEdit and change the behavior depending on whether or not we're in edit mode by setting readOnly to true?

@Umcaruje
Copy link
Member

Umcaruje commented Jul 17, 2016

Can someone explain the purpose of using two components over one in this instance? For example, can't we simply keep the input a QLineEdit and change the behavior depending on whether or not we're in edit mode by setting readOnly to true?

Well, if one can make the disabled QLineEdit completely backgroundless and borderless, then that would be a better solution.

@BaraMGB
Copy link
Contributor Author

BaraMGB commented Jul 22, 2016

Update: Now it uses for both (labeling and renaming) a QLineEdit.

@Umcaruje
Copy link
Member

screenshot from 2016-07-24 14 59 22

Tested, looks and works like a charm 👍

m_scene->setSceneRect( 0, 0, 33, FxLineHeight );

m_view = new QGraphicsView( this );
m_view->setStyleSheet( "border-style: none; background: transparent;" );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't you do this in the CSS?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think so. The QGraphicsView is only a container for the QLineEdit. With it we can rotate the QLineEdit. I can't imagine a situation where the view should have borders or a background color. It's an internal solution the user (themer) don't need to know.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, ok, thanks for clarifying 👍. This looks good to merge.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just to let you know: if a track or a fx is renamed Lmms does not consider the project as modified.
You can quit with no question about saving...

@BaraMGB
Copy link
Contributor Author

BaraMGB commented Jul 24, 2016

@jasp00 Thanks for your revisiting. I updated the branch.
@midi-pascal interesting. I have to figure out how to fix that. perhaps you file an issue for that.

@zonkmachine
Copy link
Member

I have to figure out how to fix that. perhaps you file an issue for that.

I think you just add Engine::getSong()->setModified(); after your changes.

@jasp00
Copy link
Member

jasp00 commented Jul 24, 2016

Undo and redo should work with renaming. A StringModel should be implemented.

@BaraMGB
Copy link
Contributor Author

BaraMGB commented Jul 25, 2016

I think you just add Engine::getSong()->setModified(); after your changes.

@zonkmachine works!

Undo and redo should work with renaming. A StringModel should be implemented.

@jasp00 can you point me to some code where I can learn how to do this?

@tresf
Copy link
Member

tresf commented Jul 25, 2016

The model classes are generated dynamically, si they're a bit hard to find in the code, but search for IntModel for an example of an Integer version.

@BaraMGB
Copy link
Contributor Author

BaraMGB commented Jul 26, 2016

I have updated. Now the project is set modified if the FxLine is renamed. But I fear I have no clue how to handle the undo/redo stuff. 😟

@jasp00
Copy link
Member

jasp00 commented Jul 26, 2016

But I fear I have no clue how to handle the undo/redo stuff.

That can be done later.

@Umcaruje
Copy link
Member

Tested this one out too, works like a charm. Here's a GIF:
gifrecord_2016-07-27_191956

}
m_renameLineEdit->setText( elideName( m_newName ) );
Engine::getSong()->setModified();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

setModified() should be called only if text has changed.

@BaraMGB
Copy link
Contributor Author

BaraMGB commented Jul 28, 2016

So, now it should works better.


QStaticText m_staticTextName;
bool m_inRename;
QString m_newName;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like this member is not needed. A local variable newName would be better.

QString FxLine::elideName( QString name )
{
const int maxTextHeight = 70;
QFontMetrics metrics( FxLine::font() );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why FxLine::font() instead of font()?

@BaraMGB
Copy link
Contributor Author

BaraMGB commented Aug 2, 2016

Update. @jasp00 thank you very much for your revisiting!

m_renameLineEdit = new QLineEdit();
m_renameLineEdit->setText( name );
m_renameLineEdit->setFixedWidth( 65 );
m_renameLineEdit->setFont( pointSizeF( FxLine::font(), 7.5f ) );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just one FxLine::font() more.

@BaraMGB
Copy link
Contributor Author

BaraMGB commented Aug 4, 2016

👍

@zonkmachine
Copy link
Member

zonkmachine commented Aug 4, 2016

Cool!

One comment. When you hover over the text ( shows horizontally ) the string is remembered.
If you now change the text and hover over it again it's the previous line that shows up.
Edit: Before you hit enter that is....

static const int FxLineHeight;

private:
void drawFxLine( QPainter* p, const FxLine *fxLine, const QString& name, bool isActive, bool sendToThis, bool receiveFromThis );
void drawFxLine( QPainter* p, const FxLine *fxLine, bool isActive, bool sendToThis, bool receiveFromThis );
QString elideName( QString name );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const QString & name should be used instead of QString name to avoid the copy of the QString.

@BaraMGB
Copy link
Contributor Author

BaraMGB commented Aug 5, 2016

@jasp00 update. 👍
@zonkmachine I turned the tool tip off in rename mode now. Good catch!

@jasp00 jasp00 merged commit a72ddf0 into LMMS:master Aug 7, 2016
sdasda7777 pushed a commit to sdasda7777/lmms that referenced this pull request Jun 28, 2022
* rename FxLine directly in a QLineEdit

* set project modified only if FxLine text is changed

* clean up some code. Optimize some things

* optimizing code / removing a couple of member variables

* minor code optimizations

* turn off the tool tip in rename mode / minor code changes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants