def paint(self, painter, option, index):
option.rect ---> rect to draw
option.state --->
QStyle.State_MouseOver
QStyle.State_Selected
QStyle Class Reference [ PyQt5.QtWidgets ]
my_style = _style()
treeview.setStyle(my_style)
class _style( QStyle ) :
def drawPrimitive(self, element, option, painter, widget):
if element == QStyle.PE_IndicatorItemViewItemDrop:
pen = QPen(Qt.red)
pen.setWidth(2)
painter.setPen(pen)
if not option.rect.isNull():
painter.drawRect(option.rect)
return
# ?? super().drawPrimitive(element, option, painter, widget)
https://qiita.com/pashango2/items/c368f07bdce4b780124c
QStyle.drawPrimitive (self, PrimitiveElement pe, QStyleOption opt, QPainter p, QWidget widget = None)
QStyle.PE_IndicatorItemViewItemDrop
An indicator that is drawn to show where an item in an item view is about to be dropped during a drag-and-drop operation in an item view.
①選択行に挿入(=上に挿入)
②インジケータは常に上に表示させる
選択行の下には表示せずに常に上
③rectが返ってくるから、上辺にだけラインを描画すれば良い
できればこんな >---<
④ドラッグ中の role を調べよう
⑤選択行が-1で、インジケータが3なら一番下だけど???
・タグを書き換えても自動では反映されない仕様なので、手動で実装してみる
・DBとはもともと独立してるから、mtagenでスキャンして再設定することになる
・変更するのはタイトルとアルバム行だけだから簡単かな??
・まずはタイトル行だけならすごく簡単だ、DB作成ルーチンをそのまま持ってくれば良いような?
・リストのアルバム行を選択してコンテキストで実行させよう
最初に検索を呼ぶ方が良いけど、制御自体はそのあとのDBリロードが完了しないと戻らないから結局は同じ
DBリロードを別スレッドにするなら意味がある
ここら辺結構ややこしいんだよなあ
検索ボックスのチェックルーチンを作る
英数一文字なら何もしない
def isSearchBox(): # true if need search
ヌルか英数一文字なら false
def makeModel():
# self.modelが既にあれば削除してからDBをロードしてself.model作成する
# isSearchBox()がfalseならモデルにセットする
# スレッド化して呼ぶ
# initからも呼ぶ
def reloadModel():
# watchDogした後に呼ぶ想定
# isSearchBox()ならsearch()する
# そのあとでmakeModel()をスレッドで呼ぶ
クラスの中でメソッドをスレッドで呼ぶ
import threading
class jikkenn():
def hogeta(self):
print('2')
def gothread(self):
thread = threading.Thread( target= self.hogeta )
thread.start()
jikkenn().gothread()
コンテキストメニューは別ファイルにしたいなあ
リストを作成するときに親を渡して記憶させておくか
winの再生キーを取得したい
グローバルな感じだが??
リストへの外部ファイルドロップ
・DDを受け付けること
・対象ファイルをmutagenしてタイトル行とアルバム行を作ればOK
・別にしたリストの派生クラスファイルに実装するか
_
リストのコンテキスト
フォルダを開く、treeで表示
リストのキー受け付け up down
keypresevent に対して行選択を変更するだけ
今はdellキーに対応してるから増やすだけで良いような?
コンテキスト
曲をタグエディタに直接渡す
スライダー
・キー対応
try:
title += m['title'][0]
except:
title='?'
ここの部分を
try:
title += m['title'][0]
except:
title=os.path.split(p[0][1] # ここ
こう変えるだけでいいような?
タイトルだけ変えても意味ないのかな?
意味はあるよな
foobarで低めに設定したデータをvlcで演奏に生かせるのか?
どう対応して良いのやら全然わからない
曲の再生は出来るが問題は
・tree表示 cueを解析してtreeに加える事は出来るな
・リスト表示はtree情報を表示するだけだよな
あとは再生か
スライダーを曲単位に設定
曲情報をどこに置くか
vlcにcueを直接渡したらどうなるんだろう?
この機能が無いとやはり効きづらい
そうなってしまったんだなあ
ReplayGain(リプレイゲイン)と、その対応ソフト
http://reika788.blog.fc2.com/blog-entry-11.html
こうなってるけど対応してなさそうなんだけど??
_
_
_
https://www.olivieraubert.net/vlc/python-ctypes/doc/
タグだから読み込んで自分でボリューム設定してやれば良いの?
libvlc_audio_set_volume(p_mi, i_volume)
メインボリュームを記録しておいて、それにゲインを加味して曲毎に設定してやれば良い
のか???
pickleってのを知ったので使ってみたいんだけど使えない
丁度foobarのaternativeを作っていてプレイリストにQstandardItemModelを使ってるのでpickleしてみたらエラーで怒られた┐('д')┌
foobarのライブラリを実現するためにsqlも使い出したので、sqlで保存したら簡単にイケた
しかし特にデータベースとしての利用は無い保存だけの目的でsqlを利用するのってどうなんだろう?
単にテキストとかcsvで書き出すのとどう違うんだろう?
sqlにしておけばCSVへは変換できたな
プレイリストが複数になって曲も大量になるようだとsqlの安心感が出てくるんだけど
もろもろの設定もsqlのデータベースに保存してしまおうかと思う
ソフトの位置、最後の曲、プレイリストの数など
プレイリストとテーブルは分けるにしても項目に対してデータが一つだけだとsqlじゃないな
こういうのはiniが普通だと思うけど、iniとDBを分けるのも・・・
仕方ないのかな
やはりpickleを使いたい
pickleなら全て一つで保存できそうな
プレイリストに関してはQstandardItemModelをリストに書き出したら保存できるだろう
各種設定も辞書化すれば保存できると、思う
やってみるか??
BASS.dll
https://www.un4seen.com/
Un4Seen BASS Audio Library for Python
https://mediarealm.com.au/articles/un4seen-bass-audio-library-python/
http://bass.radio42.com/help/html/8f455613-bc52-0829-5d87-aedf2f8d99f5.htm
[DllImportAttribute("bass")]
public static bool BASS_ChannelPause(
int handle
)
[DllImportAttribute("bass")]
public static bool BASS_ChannelStop(
int handle
)
public static long BASS_ChannelGetLength( # return long
int handle
)
public static long BASS_ChannelGetPosition(
int handle
)