~neon/juk/master

« back to all changes in this revision

Viewing changes to tagrenameroptions.cpp

  • Committer: Michael Pyne
  • Date: 2004-11-01 10:05:33 UTC
  • Revision ID: git-v1:d92239184aaf60938c41dc54d53821434cb1e400
GUI: Overhaul the file renamer configuration dialog based on a design of Scott's.  This involved a lot more code than I thought at first, but it should be pretty neat.

This also should fix wish 64849 (Add genre to file renamer) and wish 63912.
In essence this creates a dialog that has a row with each possible category, and arrows allowing you to move that category up and down.
* In the options for the category, you can control leading and trailing text, and what happens if the tag is empty.
* You can set a minimum width for the track (bug 63912).
* The dialog includes a sample result, and you can either edit the sample tag values manually, or load tags from a file to see what it would look like.
* Right now the file renamer code automatically suppresses separators between tag values that use bracketing characters, since I feel that stuff like Artist - Title - [Track] looks dumb, but that may be changed/removed later.

Suggestions are accepted: michael (dot) pyne (at) kdemail (dot) net.

BUG:63912
BUG:64849

svn path=/trunk/kdemultimedia/juk/; revision=359516

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************
 
2
    begin                : Thu Oct 28 2004
 
3
    copyright            : (C) 2004 by Michael Pyne
 
4
    email                : michael.pyne@kdemail.net
 
5
***************************************************************************/
 
6
 
 
7
/***************************************************************************
 
8
 *                                                                         *
 
9
 *   This program is free software; you can redistribute it and/or modify  *
 
10
 *   it under the terms of the GNU General Public License as published by  *
 
11
 *   the Free Software Foundation; either version 2 of the License, or     *
 
12
 *   (at your option) any later version.                                   *
 
13
 *                                                                         *
 
14
 ***************************************************************************/
 
15
 
 
16
#include <kdebug.h>
 
17
#include <kglobal.h>
 
18
#include <klocale.h>
 
19
#include <kconfig.h>
 
20
#include <kconfigbase.h>
 
21
 
 
22
#include "tagrenameroptions.h"
 
23
 
 
24
TagRenamerOptions::TagRenamerOptions() :
 
25
    m_emptyAction(IgnoreEmptyTag),
 
26
    m_trackWidth(0),
 
27
    m_disabled(true),
 
28
    m_category(Unknown)
 
29
{
 
30
}
 
31
 
 
32
TagRenamerOptions::TagRenamerOptions(const TagRenamerOptions &other) :
 
33
    m_prefix(other.m_prefix),
 
34
    m_suffix(other.m_suffix),
 
35
    m_emptyAction(other.m_emptyAction),
 
36
    m_emptyText(other.m_emptyText),
 
37
    m_trackWidth(other.m_trackWidth),
 
38
    m_disabled(other.m_disabled),
 
39
    m_category(other.m_category)
 
40
{
 
41
}
 
42
 
 
43
TagRenamerOptions::TagRenamerOptions(TagType category)
 
44
    : m_category(category)
 
45
{
 
46
    // Make sure we don't use translated strings for the config file keys.
 
47
 
 
48
    const QString typeKey = getTagTypeText(category, false);
 
49
    KConfigGroup config(KGlobal::config(), "FileRenamer");
 
50
 
 
51
    setSuffix(config.readEntry(QString("%1Suffix").arg(typeKey)));
 
52
    setPrefix(config.readEntry(QString("%1Prefix").arg(typeKey)));
 
53
 
 
54
    // Default the emptyAction to ignoring the empty tag.
 
55
 
 
56
    const QString emptyAction = config.readEntry(QString("%1EmptyAction").arg(typeKey)).lower();
 
57
    setEmptyAction(IgnoreEmptyTag);
 
58
 
 
59
    if(emptyAction == "forceemptyinclude")
 
60
        setEmptyAction(ForceEmptyInclude);
 
61
    else if(emptyAction == "usereplacementvalue")
 
62
        setEmptyAction(UseReplacementValue);
 
63
 
 
64
    setEmptyText(config.readEntry(QString("%1EmptyText").arg(typeKey)));
 
65
    setTrackWidth(config.readUnsignedNumEntry(QString("%1TrackWidth").arg(typeKey)));
 
66
    setDisabled(config.readBoolEntry(QString("%1Disabled").arg(typeKey)));
 
67
}
 
68
 
 
69
QString TagRenamerOptions::getTagTypeText(TagType type, bool translate)
 
70
{
 
71
    // These must be declared in the same order that they are defined in
 
72
    // the TagType enum in test.h.  We can dynamically translate these strings,
 
73
    // so make sure that I18N_NOOP() is used instead of i18n().
 
74
 
 
75
    const char *tags[] = {
 
76
        I18N_NOOP("Title"), I18N_NOOP("Artist"), I18N_NOOP("Album"),
 
77
        I18N_NOOP("Track"), I18N_NOOP("Genre"), I18N_NOOP("Year")
 
78
    };
 
79
 
 
80
    if(type < StartTag || type >= NumTypes) {
 
81
        kdWarning() << "I don't know what category we're looking up, this is a problem." << endl;
 
82
        kdWarning() << "The category ID is " << (unsigned) type << endl;
 
83
        return translate ? i18n("Unknown") : "Unknown";
 
84
    }
 
85
 
 
86
    return translate ? i18n(tags[type]) : tags[type];
 
87
}
 
88
 
 
89
void TagRenamerOptions::saveConfig() const
 
90
{
 
91
    // Make sure we don't use translated strings for the config file keys.
 
92
 
 
93
    const QString typeKey = getTagTypeText(false);
 
94
    KConfigGroup config(KGlobal::config(), "FileRenamer");
 
95
 
 
96
    config.writeEntry(QString("%1Suffix").arg(typeKey), suffix());
 
97
    config.writeEntry(QString("%1Prefix").arg(typeKey), prefix());
 
98
 
 
99
    QString emptyStr;
 
100
 
 
101
    switch(emptyAction()) {
 
102
    case ForceEmptyInclude:
 
103
        emptyStr = "ForceEmptyInclude";
 
104
    break;
 
105
 
 
106
    case IgnoreEmptyTag:
 
107
        emptyStr = "IgnoreEmptyTag";
 
108
    break;
 
109
 
 
110
    case UseReplacementValue:
 
111
        emptyStr = "UseReplacementValue";
 
112
    break;
 
113
    }
 
114
 
 
115
    config.writeEntry(QString("%1EmptyAction").arg(typeKey), emptyStr);
 
116
    config.writeEntry(QString("%1EmptyText").arg(typeKey), emptyText());
 
117
    config.writeEntry(QString("%1Disabled").arg(typeKey), disabled());
 
118
 
 
119
    if(category() == Track)
 
120
        config.writeEntry(QString("%1TrackWidth").arg(typeKey), trackWidth());
 
121
 
 
122
    config.sync();
 
123
}
 
124
 
 
125
TagRenamerOptions &TagRenamerOptions::operator=(const TagRenamerOptions &other)
 
126
{
 
127
    if(this == &other)
 
128
        return *this;
 
129
 
 
130
    setPrefix(other.prefix());
 
131
    setSuffix(other.suffix());
 
132
    setEmptyText(other.emptyText());
 
133
    setEmptyAction(other.emptyAction());
 
134
    setTrackWidth(other.trackWidth());
 
135
    setDisabled(other.disabled());
 
136
    setCategory(other.category());
 
137
 
 
138
    return *this;
 
139
}
 
140
 
 
141
// vim: set et ts=4 sw=4: